Показаны сообщения с ярлыком Xaml. Показать все сообщения
Показаны сообщения с ярлыком Xaml. Показать все сообщения

XAML-> PNG | GIF | JPG | ...

понедельник, 27 июля 2009 г.,

Из XAML можно получить изображение в формате PNG, GIF, JPG. Ниже пример создания PNG-файла.
using System.IO;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;

public class XamlHelper
{
    public static void SaveToPNG(FrameworkElement fe, string fname)
    {
        var bitmap = new RenderTargetBitmap((int)fe.ActualWidth, (int)fe.ActualHeight, 96, 96, PixelFormats.Pbgra32);
        bitmap.Render(fe);
        BitmapEncoder encoder = new PngBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(bitmap));
        using (Stream stream = File.Create(fname))
            encoder.Save(stream);
    }
}

Также можно создать: GIF - с помощью GifBitmapEncoder, JPG - JpegBitmapEncoder.

P.S.
код можно использовать в WinForms приложении или обычной Class Library. Для этого к проекту необходимо подключить следующие сборки:
C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\WindowsBase.dll
C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationFramework.dll
C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationCore.dll

WPF: загрузка html в WebBrowser из ресурсов

среда, 15 июля 2009 г.,

Есть следующий xaml, в котором определен WebBrowser:
<Window x:Class="WpfApplication6.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
  <WebBrowser x:Name="_Wb" Margin="20" />
</Window>
Требуется загрузить в WebBrowser содержимое файла, например, Content.htm, который добавлен в проект как ресурс (т.е. в свойствах файла указан Build Action: Resource).
Для этого в конструктор класса Window1 надо добавить следующий код:
Uri uri = new Uri(@"pack://application:,,,/Content.htm", UriKind.Absolute);
Stream source = Application.GetResourceStream(uri).Stream;
_Wb.NavigateToStream(source);

P.S.
Ресурсный файл Content.htm можно сделать "подфайлом" для Window.xaml, т.е. Content.htm станет соседом для Window.xaml.cs; для этого надо в файле проекта (файл с расширением .csproj) заменить
<Resource Include="Window1.htm" />
на
<Resource Include="Window1.htm">
    <DependentUpon>Window1.xaml</DependentUpon>
</Resource>
В Visual Studio в появившемся диалоге "File Modification Detected" нажать Reload.

Silverlight в WinForms

понедельник, 6 апреля 2009 г.,

Silverlight можно запустить в WinForms-приложении. Для этого надо: 1) Создать Windows Forms Application; 2) В References добавить "C:\Program Files\Microsoft Silverlight\3.0.40307.0\npctrl.dll" (появится XcpControlLib); 3) В конструктор формы добавить следующий код:

string html = @"
        <BODY STYLE='margin: 0px; padding: 0px;'>
            <SCRIPT TYPE='text/javascript'>
            function onSilverlightError(sender, args)
            {
                alert(args.errorMessage + ' ' + args.errorType);
            }
            </SCRIPT>
            <SCRIPT id='_Xaml' type='text/xaml'>
                <?xml version='1.0' encoding='utf-8' ?>
                <Canvas
                    xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
                    xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
                        <TextBlock FontSize='40' Foreground='Red'>Hello, World!</TextBlock>
                </Canvas>
            </SCRIPT>
            <OBJECT ID='_Ag' CLASSID='clsid:DFEAF541-F3E1-4C24-ACAC-99C30715084A' Width='100%' Height='100%'>
                <PARAM NAME='Background' VALUE='#FFFADF' />
                <PARAM NAME='onerror' VALUE='onSilverlightError' />
                <PARAM NAME='Source' VALUE='#_Xaml' />
            </OBJECT>
        </BODY>";

WebBrowser wb = new WebBrowser();
wb.Dock = DockStyle.Fill;
wb.DocumentText = html;
wb.Parent = this;

Есть одно ограничение: в xaml нельзя использовать, например, Button; получим exception: "ParserError: Unknown element: Button". Причина в том, что Button определен в System.Windows.Controls (System.Windows.dll); Для использования контролов из Silverlight (старше 1) требуется компиляция; в результате будет создан .xap-файл, который необходимо загрузить в Silverlight.