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>
,我添加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
风格。
你的回答,我得到答案,谢谢!我必须添加“StaticResource” –
也看看我更新的答案,通常它应该如何完成。 :) –