2017-03-09 21 views
1
<DataGridCheckBoxColumn 
      HeaderStyle="{StaticResource MetroDataGridColumnHeader}" 
      Binding="{Binding Path=IsSelected, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
      IsThreeState="True" 
      CellStyle="{StaticResource CenterCellStyle}" 
      CanUserReorder="False" 
      CanUserResize="False" Header="IsChecked"> 
<DataGridCheckBoxColumn.HeaderTemplate> 
    <DataTemplate x:Name="dtAllServerConnectionChkBx"> 
      <CheckBox 
       VerticalAlignment="Center" 
       HorizontalAlignment="Center" 
       IsChecked="{Binding Path=DataContext.HeaderChecked, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
       x:Name="ckbSelectedAllServerConnections" 
       Checked="UpCheckbox_Checked" 
       Margin="10,0,5,0"  
       Unchecked="UpCheckbox_Checked" /> 
    </DataTemplate> 
</DataGridCheckBoxColumn.HeaderTemplate> 

<DataGridCheckBoxColumn.ElementStyle> 
    <Style TargetType="CheckBox" BasedOn="{StaticResource {x:Type CheckBox}}" > 
     <EventSetter Event="Checked" Handler="OnChecked" /> 
     <EventSetter Event="Unchecked" Handler="OnUnChecked"/> 
    </Style> 
</DataGridCheckBoxColumn.ElementStyle> 

wpf - 如何在C#代碼後面寫下DataGridCheckBoxColumn?

+0

你好HMS,敬請諒解該Stackoverflow不是您的代碼寫入服務。如果您在翻譯特定部分時遇到問題,則應僅詢問這部分內容,幷包括您已經想出的內容。所提出的XAML當然不適合作爲如何轉化爲代碼的問題(作爲原則)。它包含許多瑣碎的屬性制定者和許多不同的方面。 – grek40

回答

0

試試這個創建ElementStyle

Style style = new Style(typeof(CheckBox)); 
style.Setters.Add(new EventSetter(CheckBox.CheckedEvent, new RoutedEventHandler(OnChecked))); 
style.Setters.Add(new EventSetter(CheckBox.UncheckedEvent, new RoutedEventHandler(OnUnChecked))); 

如果您希望能夠創建HeaderTemplate動態,你可以使用XamlReader.Parse方法(沒有事件處理程序):

string xaml = "<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" x:Name=\"dtAllServerConnectionChkBx\"><CheckBox VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" IsChecked=\"{Binding Path=DataContext.HeaderChecked, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}\" x:Name=\"ckbSelectedAllServerConnections\" Margin=\"10,0,5,0\"/></DataTemplate>"; 
DataTemplate dt = System.Windows.Markup.XamlReader.Parse(xaml) as DataTemplate; 

DataGridCheckBoxColumn column = new DataGridCheckBoxColumn(); 
column.HeaderTemplate = dt; 
column.CellStyle = style; 

爲了能夠連接事件處理程序,您需要做一些破解,例如creati納克定制CheckBox控制,這裏建議:

Attaching an Event Handler to a Code Generated DataTemplate

或者你可以只定義DataTemplate<Windows.Resources>元素在XAML標記,並像這樣引用它:

column.HeaderTemplate = Resources["dtAllServerConnectionChkBx"] as DataTemplate; 
+0

感謝您的評論,我用你的代碼,但不幸的是我的問題仍然存在。我已經附加了我的代碼進一步瞭解爲什麼我沒有選中行後檢查和取消選中我的動態數據網格。 – hms

+0

附加你的代碼?哪裏?另外,我沒有看到這與你如何以編程方式創建對象的原始問題有關。如果您有新問題,請提出一個新問題。 – mm8

+0

@ mm8他「附加」了他的代碼作爲答案,然後被某人刪除。 – grek40

相關問題