我有這個DataGrid我想更改禁用行爲(xaml); 我想在模板中更改這個小部分。派生(展開)WPF中的控件模板
如果這是不可能我不介意使用:
<Setter Property="OverridesDefaultStyle" Value="True"/>
並取代我的控制整個XAML(模板),但我需要完整的模板進行復制粘貼,並幫助在哪裏改變禁用的外觀部分。
任何人都可以幫助我嗎?
我有這個DataGrid我想更改禁用行爲(xaml); 我想在模板中更改這個小部分。派生(展開)WPF中的控件模板
如果這是不可能我不介意使用:
<Setter Property="OverridesDefaultStyle" Value="True"/>
並取代我的控制整個XAML(模板),但我需要完整的模板進行復制粘貼,並幫助在哪裏改變禁用的外觀部分。
任何人都可以幫助我嗎?
編輯:有人指出,所有的默認控制模板可在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被禁用每個列標題和數據列單元格的前景設置爲綠色。
@meyou:好的,編輯我的答案以給出完整的模板。 – 2012-03-14 13:06:34
這種工作是不必要的,你可以得到MSDN上的所有模板,請參閱http://stackoverflow.com/questions/1559261/control-template-for-existing-controls-in-wpf – 2012-03-14 13:11:20
@ H.B。哦,我不知道。絕對更容易:) – 2012-03-14 13:18:33
要定義任何控件的禁用行爲,您應該相應地在控件模板中更改已禁用的可視狀態。
我沒有看到它...是張貼在這裏正確的? http://social.msdn.microsoft.com/Forums/en/wpf/thread/8e6f3c70-f65f-4152-9469-9ae3e9239126如果是的話你說的部分在哪裏? – Programer 2012-03-14 10:00:39
你能解釋一下,你究竟想要達到什麼目的?您想要將新模板應用於WPF DataGrid,並且希望當前的DataGrid控件模板在其上覆蓋? – 2012-03-14 09:51:05
使用相同的模板,只能將IsEnabled前景從灰色更改爲綠色(覆蓋此部分) – Programer 2012-03-14 14:01:26