如何使用ControlTemplate设置控件的宽度或高度属性?

时间:2014-03-12 18:33:13

标签: wpf xaml

如何使用ControlTemplate设置控件的宽度或高度?

例如,我有这个模板:

<ControlTemplate x:Key="GridSplitterTemplate" TargetType="{x:Type GridSplitter}">
    <!-- What goes here? -->
</ControlTemplate>

这是模板用法:

<GridSplitter Template="{StaticResource GridSplitterTemplate}"
              Grid.Column="1" ResizeDirection="Columns" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>

我还有几个GridSplitter,所有这些都应该GridSplitter.Width="10"。如何使用ControlTemplate设置一次?

2 个答案:

答案 0 :(得分:4)

如果你想要&#34;硬代码&#34;使用ControlTemplate的宽度/高度,然后只需设置根元素的宽度/高度:

<ControlTemplate x:Key="GridSplitterTemplate" TargetType="{x:Type GridSplitter}">
    <!-- What goes here? -->
    <Grid Width="10" Height="10">
    </Grid>
</ControlTemplate>

我认为@lll有一点 - 这通常是你用Style做的事情。如果你想要一个不同大小的GridSplitter实例,会发生什么?而且你不会因为这种方法而失去任何东西:

<Style x:Key="GridSplitterStyle" TargetType="{x:Type GridSplitter}">
    <Setter Property="Width" Value="10" />
    <Setter Property="Height" Value="10" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate x:Key="GridSplitterTemplate" TargetType="{x:Type GridSplitter}">
                <Grid Width="{TemplateBinding Width}" Height="{TemplateBinding Height}">
                </Grid>
           </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

现在,让您的实例引用样式而不是控件模板:

<GridSplitter Style="{StaticResource GridSplitterStyle}"

这允许您仍然具有默认的高度/宽度10,但如果需要,实例可以覆盖它:

<GridSplitter Style="{StaticResource GridSplitterStyle}" Width=20

答案 1 :(得分:1)

您只想设置Style而不是ControlTemplate

<Style TargetType="GridSplitter" x:Name="GridSplitterTemplate">
    <Setter Property="Width" Value="10"/>/
</Style>

如果您真的想使用ControlTemplate

<ControlTemplate x:Key="GridSplitterTemplate" TargetType="{x:Type GridSplitter}">
            <GridSplitter Width="10"/>
</ControlTemplate>