משיב מוביל
הטמעת CheckBox תלת מצבי בעמודה ב DataGrid ע"י code behind

שאלה
-
היי,
יצרתי check box תלת מצבי (בעזרת מי שענה לי כאן :) ), ואני רוצה להטמיע אותו בעמודה ב DataGrid קיים.
אני חייבת לעשות זאת ב code behind.
ה ControlTemplate של ה check box בזאמל:
<ControlTemplate TargetType="{x:Type CheckBox}"> <DockPanel Height="Auto" Width="Auto"> <Border BorderBrush="Gray" BorderThickness="1" Width="15"> <Border.Effect> <DropShadowEffect BlurRadius="2" ShadowDepth="0.5" /> </Border.Effect> <TextBlock x:Name="bullet" TextAlignment="Center"></TextBlock> </Border> </DockPanel> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="{x:Null}"> <Setter TargetName="bullet" Property="Text" Value="?" /> </Trigger> <Trigger Property="IsChecked" Value="True"> <Setter TargetName="bullet" Property="Text" Value="V" /> </Trigger> <Trigger Property="IsChecked" Value="False"> <Setter TargetName="bullet" Property="Text" Value="X" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate>
את ה ControlTemplate הזה אני רוצה להחיל על DataGridCheckBoxColumn. (שעד כמה שאני רואה יש לו את הפרופרטי IsThreeState אך אין לו את IsChecked..)
רעיונות, כיוונים, וגם לינקים למקומות שאפשר להעמיק בהם על הנושא, יעזרו לי מאוד.
תודה רבה!
יום שני 09 יולי 2012 06:45
תשובות
-
הצלחתי!
עכשיו אני רק מסתבכת עם זה שמשום מה התא נפרש על שטח גדול יותר ממה שמוצג בעין (כלומר- ה CheckBox נראה בגודל הרצוי, אך מסביבו רקע לבן גדול מדי.)
אם יש רעיונות, אשמח!
וזה הזאמל-
<Window x:Class="DataGrid.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525" Loaded="OnWindowLoaded"> <Window.Resources> <Style TargetType="{x:Type CheckBox}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type CheckBox}"> <DockPanel Height="20" Width="20"> <Border BorderBrush="Gray" BorderThickness="1" Width="15"> <Border.Effect> <DropShadowEffect BlurRadius="2" ShadowDepth="0.5" /> </Border.Effect> <TextBlock x:Name="bullet" TextAlignment="Center"></TextBlock> </Border> </DockPanel> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="{x:Null}"> <Setter TargetName="bullet" Property="Text" Value="?" /> </Trigger> <Trigger Property="IsChecked" Value="True"> <Setter TargetName="bullet" Property="Text" Value="V" /> </Trigger> <Trigger Property="IsChecked" Value="False"> <Setter TargetName="bullet" Property="Text" Value="X" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources> <Grid> <DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False" Margin="295,45,12,66" > <DataGrid.Columns> <DataGridTemplateColumn Header="CheckBox" Width="*" IsReadOnly="True"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <CheckBox IsThreeState="True" IsChecked="{x:Null}" Margin="68,49,0,0" Name="checkBox1" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> </Grid> </Window>
תודה :)
- סומן כתשובה על-ידי RotemR10 יום שלישי 10 יולי 2012 07:32
יום שני 09 יולי 2012 19:59 -
נמצא הפיתרון (לטובת מי שהתעניין- היה צריך להוריד את ה margin ולשנות את Width ל Auto):
<DataGridTemplateColumn Header="CheckBox" Width="Auto" IsReadOnly="True"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <CheckBox IsThreeState="True" IsChecked="{x:Null}" Name="checkBox1" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>
המשך יום טוב לכולם :)
- סומן כתשובה על-ידי RotemR10 יום שלישי 10 יולי 2012 07:32
יום שלישי 10 יולי 2012 07:32
כל התגובות
-
הצלחתי!
עכשיו אני רק מסתבכת עם זה שמשום מה התא נפרש על שטח גדול יותר ממה שמוצג בעין (כלומר- ה CheckBox נראה בגודל הרצוי, אך מסביבו רקע לבן גדול מדי.)
אם יש רעיונות, אשמח!
וזה הזאמל-
<Window x:Class="DataGrid.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525" Loaded="OnWindowLoaded"> <Window.Resources> <Style TargetType="{x:Type CheckBox}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type CheckBox}"> <DockPanel Height="20" Width="20"> <Border BorderBrush="Gray" BorderThickness="1" Width="15"> <Border.Effect> <DropShadowEffect BlurRadius="2" ShadowDepth="0.5" /> </Border.Effect> <TextBlock x:Name="bullet" TextAlignment="Center"></TextBlock> </Border> </DockPanel> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="{x:Null}"> <Setter TargetName="bullet" Property="Text" Value="?" /> </Trigger> <Trigger Property="IsChecked" Value="True"> <Setter TargetName="bullet" Property="Text" Value="V" /> </Trigger> <Trigger Property="IsChecked" Value="False"> <Setter TargetName="bullet" Property="Text" Value="X" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources> <Grid> <DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False" Margin="295,45,12,66" > <DataGrid.Columns> <DataGridTemplateColumn Header="CheckBox" Width="*" IsReadOnly="True"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <CheckBox IsThreeState="True" IsChecked="{x:Null}" Margin="68,49,0,0" Name="checkBox1" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> </Grid> </Window>
תודה :)
- סומן כתשובה על-ידי RotemR10 יום שלישי 10 יולי 2012 07:32
יום שני 09 יולי 2012 19:59 -
נמצא הפיתרון (לטובת מי שהתעניין- היה צריך להוריד את ה margin ולשנות את Width ל Auto):
<DataGridTemplateColumn Header="CheckBox" Width="Auto" IsReadOnly="True"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <CheckBox IsThreeState="True" IsChecked="{x:Null}" Name="checkBox1" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>
המשך יום טוב לכולם :)
- סומן כתשובה על-ידי RotemR10 יום שלישי 10 יולי 2012 07:32
יום שלישי 10 יולי 2012 07:32