UWP:如何避免Templete Control Development中的样式名称(x:Name)?

时间:2017-08-08 07:27:07

标签: uwp uwp-xaml

使用UWP(或WPF),我在XAML样式上添加x:Name。 和Style在x:name中根本不起作用。为什么?

现在,我正在开发一个模板控件。要使用“SetValue”更改样式属性,我必须在我的Style上添加名称。然后我添加了名称x:Name =“MyStyleName”但它有问题。

这是一个简单的示例代码,带有样式x:名称。

    <Grid Background="Black" Width="200" Height="200" >

        <Grid.Resources>
            <Style x:Name="MyStyleName"  TargetType="Ellipse">
                <Setter Property="Height" Value="100" />
                <Setter Property="Width" Value="100" />
                <Setter Property="Stroke" Value="Red"/>
            </Style>
        </Grid.Resources>

        <Ellipse x:Name="Circle1" />
        <Ellipse x:Name="Circle2" />

    </Grid>

enter image description here

我在样式上添加x:Name的主要原因是,在模板控件开发期间,我想按名称访问STYLE。

        var _grid = this.GetTemplateChild(GRID_NAME) as Grid;
        if (_grid != null)
        {
            // change grid margin.
            _grid.Margin = new Thickness(0, 5, 0, 0);

            // get Style of Grid
            var _gridStyle = _grid .Resources[GRID_STYLE_NAME] as Style;
            if(_gridStyle != null)
            {
                // Change Gird Height as STYLE !
                _gridStyle.SetValue(FrameworkElement.HeightProperty, 10);

            }
        }

有没有什么好方法可以避免使用Style x:Name ??

1 个答案:

答案 0 :(得分:2)

您需要使用x:Key代替资源。它主要是ResourceDictionary内的标识符。

但我们可以改善吗?因为我不推荐像这样的硬编码字符串。如果使用您的控件的开发人员不知道他需要指定该样式会怎么样?

解决方法是在控件中创建GridStyle类型Style依赖项属性,并将其绑定到XAML文件中的现有样式(例如,您的Generic.xaml内部< em>主题文件夹,其中放置了控件的默认样式)。这样,其他开发人员也可以自由地应用自己的Grid样式。

相关问题