2012-03-14 49 views
1

我有這個DataGrid我想更改禁用行爲(xaml); 我想在模板中更改這個小部分。派生(展開)WPF中的控件模板

如果這是不可能我不介意使用:

<Setter Property="OverridesDefaultStyle" Value="True"/> 

並取代我的控制整個XAML(模板),但我需要完整的模板進行復制粘貼,並幫助在哪裏改變禁用的外觀部分。

任何人都可以幫助我嗎?

+1

你能解釋一下,你究竟想要達到什麼目的?您想要將新模板應用於WPF DataGrid,並且希望當前的DataGrid控件模板在其上覆蓋? – 2012-03-14 09:51:05

+0

使用相同的模板,只能將IsEnabled前景從灰色更改爲綠色(覆蓋此部分) – Programer 2012-03-14 14:01:26

回答

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被禁用每個列標題和數據列單元格的前景設置爲綠色。

+0

@meyou:好的,編輯我的答案以給出完整的模板。 – 2012-03-14 13:06:34

+0

這種工作是不必要的,你可以得到MSDN上的所有模板,請參閱http://stackoverflow.com/questions/1559261/control-template-for-existing-controls-in-wpf – 2012-03-14 13:11:20

+0

@ H.B。哦,我不知道。絕對更容易:) – 2012-03-14 13:18:33

0

要定義任何控件的禁用行爲,您應該相應地在控件模板中更改已禁用的可視狀態。

+0

我沒有看到它...是張貼在這裏正確的? http://social.msdn.microsoft.com/Forums/en/wpf/thread/8e6f3c70-f65f-4152-9469-9ae3e9239126如果是的話你說的部分在哪裏? – Programer 2012-03-14 10:00:39