使用UWP(或WPF),我在XAML样式上添加x:Name . 和Style在x:name中根本不起作用 . 为什么?
现在,我正在开发一个模板控件 . 要使用“SetValue”更改样式属性,我必须在我的Style上添加名称 . 然后我添加了名称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: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);
}
}
有没有什么好方法可以避免风格x:名字?
1 回答
您需要使用
x:Key
代替资源 . 它主要是ResourceDictionary
中的标识符 .但我们可以改善吗?因为我不推荐像这样的硬编码字符串 . 如果使用您的控件的开发人员不知道他需要指定该样式,该怎么办?
解决方案是在控件中创建
GridStyle
类型Style
依赖项属性,并将其绑定到XAML文件中的现有样式(例如,在您放置控件的默认样式的Themes文件夹中的Generic.xaml
) . 这样,其他开发人员也可以自由地应用自己的Grid
样式 .