为网格创建可视化模板

时间:2015-02-19 10:59:20

标签: wpf vb.net

我正在尝试为grid对象创建一个可视化模板(在资源字典中保存为xaml代码),我将应用于稍后在运行时创建的各种grid对象。

我需要一个带边框和背景的简约风格。 这样做的最佳方式是什么?

非常感谢简单的工作示例。

好的,所以,在搜索了例子之后,我尝试了这样的事情:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<Style x:Key="TestStyle">
<Setter Property="Background" Value="#FF873507" />
<Setter.Value>
    <ControlTemplate>
        <Grid>
            <Border BorderThickness="7" CornerRadius="4">
                <Border.BorderBrush>
                    <SolidColorBrush Color="#73B2F5"/>
                </Border.BorderBrush>
            </Border>
        </Grid>
    </ControlTemplate>
</Setter.Value>
</Style>

</ResourceDictionary>

2 个答案:

答案 0 :(得分:1)

WPF实际上并不是那样......因为Grid类没有Template属性,所以不能为它定义新的ControlTemplate。您可以做的最近的事情是创建一个包含您要使用的UI元素的UserControl,然后在显示这些控件的任何位置显示UserControl

或者,如果内部控件始终相同,可以ControlTemplate内定义您的内容:

<ControlTemplate x:Key="StaticGrid">
    <Grid>
        <Border BorderThickness="7" CornerRadius="4">
            <Border.BorderBrush>
                <SolidColorBrush Color="#73B2F5"/>
            </Border.BorderBrush>
            <!--Add your inner elements here-->
        </Border>
    </Grid>
</ControlTemplate>

然后您可以这样显示:

<ContentControl Template="{StaticResource StaticGrid}" />

但是,您无法使用此方法添加不同的内部元素。如果您使用UserControl方法,则可能会将UserControl替换为Grid,以便您实际上扩展Grid类,但您仍然不会能够添加不同的元素。

您在Style中可以做的最好的事情就是设置Background属性。

答案 1 :(得分:0)

经过多次尝试和挫折后,我发现了一个更简单的解决方案,对我有用。 我没有尝试将样式应用于网格,而是将其应用于网格周围的边框。

所以,我的字典看起来像这样:

<Style x:Key="TestStyle" TargetType="{x:Type Border}">

    <Setter Property="Background" Value="#FFBDACA2" />
    <Setter Property="BorderBrush" Value="#FFFF5E00" />
    <Setter Property="CornerRadius" Value="30,30,30,30" />
    <Setter Property="BorderThickness" Value="10" />

</Style>

我的主框架xaml:

<Border Style="{StaticResource TestStyle}" >
    <Grid>
    </Grid>
</Border>