UWP:如何避免Templete控件开发中的样式名称(x:Name)?

问题描述:

使用UWP(或WPF),我在我的XAML样式中添加了x:Name。 和Style对x:name完全不起作用。为什么?UWP:如何避免Templete控件开发中的样式名称(x:Name)?

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

这是一个简单的示例代码,其中包含Style x:Name。

<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的主要原因是:在样式名称,在模板控制的发展,我想通过名称来访问的风格。

 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 ??

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

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

对此的解决方案是在你的控制,以创建类型Style依赖属性的GridStyle,并将其绑定到现有的风格在你的XAML文件(例如,您的Generic.xaml主题,你把默认样式文件夹控制)。这样,其他开发人员也可以*应用自己的Grid风格。

+1

你的回答,我得到答案,谢谢!我必须添加“StaticResource”

+0

也看看我更新的答案,通常它应该如何完成。 :) –