Wpf 将画布设置为控件模板?
我在ResourceDictionary xaml文件中有一个画布,如下所示:Wpf 将画布设置为控件模板?,wpf,canvas,controltemplate,Wpf,Canvas,Controltemplate,我在ResourceDictionary xaml文件中有一个画布,如下所示: <Canvas x:Key="Icon"> <Path ... /> <Path ... /> </Canvas> 这个很好用。现在我想创建一个按钮,它使用与模板相同的图标。因此,我创建了一个控件模板: <ControlTemplate x:Key="IconTemplate"> ... </ControlTemplate
<Canvas x:Key="Icon">
<Path ... />
<Path ... />
</Canvas>
这个很好用。现在我想创建一个按钮,它使用与模板相同的图标。因此,我创建了一个控件模板:
<ControlTemplate x:Key="IconTemplate">
...
</ControlTemplate>
...
现在的问题是:如何将“图标”资源画布放入控件模板?据我所知,Canvas没有样式或模板属性。它有一个Children属性,但不能通过XAML访问。如何在模板中使用画布?当您创建一个类型(如画布)作为资源时,您正在创建该类型的一个实例。这意味着您不能将该资源放在应用程序中的多个位置(一个元素一次只能放在一个位置)。我认为,您应该看看如何使用控件模板 你不需要任何代码 大概是这样的:
<ControlTemplate x:Key="Icon">
<Canvas>
<Path ... />
<Path ... />
</Canvas>
</ControlTemplate>
<Button>
<Control Template="{StaticResource Icon}" />
</Button>
<Button Template="{StaticResource Icon}" />
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:PresentationOptions="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options">
<DrawingBrush x:Key="dialogerror" Stretch="Uniform">
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing>
... define geometry here ...
</GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</ResourceDictionary>
这使用层次结构中最广泛适用的类型,也是最轻的类型。为按钮定义图标的一个好方法是使用绘图笔刷,并将其设置为嵌入按钮中的矩形的填充:
myDrawingBrush必须在以下资源中定义:
<ControlTemplate x:Key="Icon">
<Canvas>
<Path ... />
<Path ... />
</Canvas>
</ControlTemplate>
<Button>
<Control Template="{StaticResource Icon}" />
</Button>
<Button Template="{StaticResource Icon}" />
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:PresentationOptions="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options">
<DrawingBrush x:Key="dialogerror" Stretch="Uniform">
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing>
... define geometry here ...
</GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</ResourceDictionary>
... 在这里定义几何体。。。
问题在于,我希望能够将我的图标用作应用程序中其他位置的画布,而不是模板。我知道我在字典中定义画布的方式只创建了一个实例,这就是为什么我创建了一个函数来克隆画布,所以创建多个实例不是问题,只是在按钮中使用了那个图标,这给我带来了麻烦。嗯。。。我还不是100%清楚你想做什么。如果你发布了一些XAML来重现你所看到的错误,那会很有帮助。我找到了答案。我只是同意你的建议,我把所有的东西都变成了一个控制模板。然后在我的画布中,我只添加了一个图标,将图标显示为画布,并将图标显示为按钮。谢谢你给我指明了正确的方向!我更新了我的答案,为你提供了更多的信息。