Wil*_*Haw 3 wpf canvas controltemplate
我在ResourceDictionary xaml文件中有一个Canvas,如下所示:
<Canvas x:Key="Icon">
<Path ... />
<Path ... />
</Canvas>
Run Code Online (Sandbox Code Playgroud)
在我的代码隐藏中,我使用加载此图标
LayoutGrid.Children.Add(FindResource("Icon") as Canvas);
Run Code Online (Sandbox Code Playgroud)
这很好用.现在我想创建一个使用相同图标作为模板的按钮.所以我创建了一个控件模板:
<ControlTemplate x:Key="IconTemplate">
...
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)
现在问题是:如何将"Icon"资源画布放入控件模板?据我所知,Canvas没有Style或Template属性.它有一个儿童酒店,但无法通过XAML访问.我如何在模板中使用我的画布?
当您创建诸如canvas之类的资源作为资源时,您将创建该类型的一个实例.这意味着您无法将该资源放在应用程序的多个位置(一个元素一次只能放在一个位置).我想你应该看一下使用控件模板.
你不需要任何代码.
像这样的东西:
<ControlTemplate x:Key="Icon">
<Canvas>
<Path ... />
<Path ... />
</Canvas>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)
然后在其他地方你做这样的事情:
<Button>
<Control Template="{StaticResource Icon}" />
</Button>
Run Code Online (Sandbox Code Playgroud)
这会构建一个常规的按钮,其中包含您的图标内容.该按钮的内容是您的图标.
但是,如果您想完全重新定义按钮的模板,那么您会这样做
<ControlTemplate x:Key="Icon" TargetType="Button">
<Canvas>
<Path ... />
<Path ... />
</Canvas>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)
然后在其他地方你做这样的事情:
<Button Template="{StaticResource Icon}" />
Run Code Online (Sandbox Code Playgroud)
请注意,这不是一个很棒的按钮样式.请查看Microsoft的此示例,以获取功能更全面的按钮模板示例.
编辑
除非您有ContentPresenter自己的内容ControlTemplate,否则无需将模板分配给内容控件.请注意,派生自的任何类Control都可以模板化,包括Control自身.因此,为了将项目放入您的视图,您可以使用:
<Control Template="{StaticResource Icon}" />
Run Code Online (Sandbox Code Playgroud)
这使用层次结构中最宽的适用类型,这也是最轻的.
| 归档时间: |
|
| 查看次数: |
9328 次 |
| 最近记录: |