WPF Application Complex Skin - PullRequest
       6

WPF Application Complex Skin

0 голосов
/ 22 апреля 2009

Я пытаюсь выяснить, как создать оболочку для приложения со сложным ресурсом.

У меня есть файл скина, в который я положил Canvas, который содержит сложные рисунки. Как это:

<ResourceDictionary>
    <Style x:Key="MainBackground" TargetType="{x:Type Canvas}">
        <Setter Property="Canvas">
            <Setter.Value>
                <Canvas Width="1440.000" Height="900.000">
                <!-- complicated artwork here -->
                </Canvas>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

Как я могу загрузить этот скин в основное приложение? Я думаю что-то вроде этого:

<Window>
    <Canvas Style="{StaticResource MainBackground}"/>
</Window >

Ответы [ 3 ]

1 голос
/ 03 октября 2009

Если я правильно понял вопрос: вы можете создать визуальную кисть из корневого визуала экспортированного файла XAML и использовать ее как кисть другого холста.

1 голос
/ 11 марта 2011

Я знаю, что это старый вопрос ... но есть несколько способов сделать это. В надежде, что это поможет поисковику Google, я поделюсь двумя способами.

Прежде всего, вы можете просто поместить Viewbox вокруг этого Canvas (который вы получили из преобразованного файла .ai). Имейте в виду, что вам может понадобиться использовать свойства Stretch и выравнивание, чтобы заставить его работать так, как вы хотите ... но, скорее всего, вы установите для Stretch значение UniformToFill, а для свойств выравнивания - Center:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="BackgroundSkin.MainWindow"
    x:Name="Window"
    Width="640"
    Height="480"
>
    <Grid x:Name="LayoutRoot">
        <Viewbox
            Stretch="UniformToFill"
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
        >
            <!-- Replace the following Canvas with yours. -->
            <Canvas Background="White"/>
        </Viewbox>
    </Grid>
</Window>

Во-вторых, если у вас есть что-то более общее (например, вы можете использовать его в качестве фона в нескольких окнах), вы можете создать кисть из этой иллюстрации. Есть несколько способов сделай это. Первый - просто понять, что вы можете использовать Expression Design для преобразования файла .ai в DrawingBrush (т.е. Expression Design может экспортировать двумя основными способами: Canvas / Shape (s) или ResourceDictionary / Brush (es)).

Если у вас нет исходного файла .ai / .design для повторного экспорта, вы можете создать VisualBrush на Canvas (как рекомендует @Ugar Turan). Обратите внимание, что вам, скорее всего, снова придется возиться со свойством Stretch (и другими свойствами) на этот раз в VisualBrush:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="BackgroundSkin.MainWindow"
    x:Name="Window"
    Width="640"
    Height="480"
    Background="{DynamicResource backgroundBrush}"    
>
    <Window.Resources>
        <!-- Replace the following Canvas with yours. -->
        <Canvas x:Key="backgroundCanvas"/>
        <VisualBrush
            x:Key="backgroundBrush"
            Visual="{DynamicResource backgroundCanvas}"
            Stretch="UniformToFill"
        />
    </Window.Resources>
</Window>
1 голос
/ 22 апреля 2009

Прежде всего, не используйте Canvas для явного размещения элементов управления. Используйте другие типы Panel (например, Grid и DockPanel).

Во-вторых, вы можете импортировать ResourceDictionary следующим образом:

<Window>
    <Window.Resources>
        <ResourceDictionary Source="YourDictionary.xaml"/>
    </Window.Resources>
</Window>

Или вы можете объединить несколько ResourceDictionary s следующим образом:

<Window>
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="YourDictionary.xaml"/>
                <ResourceDictionary Source="YourOtherDictionary.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>

        <SolidColorBrush x:Key="SomeLocalResource">Red</SolidColorBrush>
    </Window.Resources>
</Window>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...