我有这个DataGrid我想改变Disabled行为(xaml); 我想在模板中更改这个小部分。
如果不可能我不介意使用:
<Setter Property="OverridesDefaultStyle" Value="True"/>
要替换我的控件的整个xaml(模板),但我需要完整的模板来复制粘贴并帮助在哪里更改禁用的外观部件。
任何人都可以帮助我吗?
答案 0 :(得分:2)
编辑:已经指出所有默认控件模板都可以在MSDN获得,这使得以下内容具有相关性,但我会将其留在此处以获取兴趣。
给定一个控件实例,您可以使用System.Windows.Markup.XamlWriter
类序列化控件模板的标记。
获取控件模板:
string markup = System.Windows.Markup.XamlWriter.Save(control.Template);
要获得控件模板的完整转储(包括触发器等),请使用。
StringBuilder markupBuilder = new StringBuilder();
XmlWriter writer = XmlWriter.Create(markupBuilder);
System.Windows.Markup.XamlDesignerSerializationManager manager =
new System.Windows.Markup.XamlDesignerSerializationManager(writer);
manager.XamlWriterMode = System.Windows.Markup.XamlWriterMode.Value;
// data grid named dataGrid1
var template = dataGrid1.Template;
System.Windows.Markup.XamlWriter.Save(dataGrid1.Template, manager);
string markup = markupBuilder.ToString();
如果您只想在禁用DataGrid时更改其前景色,您应该能够将样式与触发器一起使用,而不是替换整个模板。
<DataGrid>
<DataGrid.Resources>
<Style
TargetType="{x:Type DataGridColumnHeader}">
<Style.Triggers>
<DataTrigger
Binding="{Binding IsEnabled, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
Value="False">
<Setter
Property="Foreground"
Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
<Style
TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<DataTrigger
Binding="{Binding IsEnabled, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
Value="False">
<Setter
Property="Foreground"
Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
<!-- Column Definitions -->
</DataGrid>
将上述2个样式添加到DataGrid的资源集合中,在禁用DataGrid时将每个列标题和数据行单元格的前景设置为绿色。
答案 1 :(得分:0)
要定义任何控件的禁用行为,您应该在控件模板中相应地更改“禁用”可视状态。