我正在试图找出如何使用复杂资源为应用程序设置外观。
我有一个皮肤文件,其中放置了包含复杂图稿的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 >
答案 0 :(得分:1)
首先,不要使用Canvas
明确地布置控件。使用其他Panel
类型(例如Grid
和DockPanel
)。
其次,您可以像这样导入ResourceDictionary
:
<Window>
<Window.Resources>
<ResourceDictionary Source="YourDictionary.xaml"/>
</Window.Resources>
</Window>
或者您可以合并多个ResourceDictionary
,如下所示:
<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>
答案 1 :(得分:1)
如果我正确理解了这个问题:您可以从导出的XAML文件的根视觉创建可视化画笔,并将其用作另一个画布的画笔。
答案 2 :(得分:1)
我知道这是一个老问题......但是有几种方法可以解决这个问题。希望这对谷歌搜索者有所帮助,我将分享两种方式。
首先,您可以简单地将一个Viewbox放在Canvas 周围(您从转换后的.ai文件中获取)。请注意,您可能必须使用Stretch和alignment属性来使其按照您的意愿运行...但很可能您将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>
其次,如果您希望拥有更多可共享的内容(这样您可以将其用作多个Windows上的背景),您可以使用该艺术作品创建一个画笔。有几种方法去做这个。第一个是简单地意识到您可以使用Expression Design将.ai文件转换为DrawingBrush(即Expression Design可以以两种主要方式导出:Canvas / Shape(s)或ResourceDictionary / Brush(es))。
如果你没有原始的.ai / .design文件进行重新导出,你可以在Canvas上创建一个VisualBrush(正如@Ugar Turan建议的那样)。请注意,这次你可能不得不在VisualBrush上使用Stretch属性(以及其他属性):
<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>