Я пытаюсь добавить элементы управления к <StackPanel>
в <DataGrid>
, используя событие LoadingRowDetails
. Но всякий раз, когда я нажимаю вне элемента управления, он исчезает.
MainWindow.xaml
<DataGrid
ItemsSource="{Binding Customers}"
AutoGenerateColumns="False"
SelectionMode="Single"
SelectionUnit="Cell"
LoadingRowDetails="manualGrid_LoadingRowDetails"
RowDetailsVisibilityMode="Visible"
x:Name="manualGrid"
>
<DataGrid.Columns>
<DataGridTextColumn Header="First Name" Binding="{Binding FirstName}" />
<DataGridTemplateColumn Header="Image" Width="SizeToCells" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Height="80" Source="{Binding Image}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Checkbox" Width="225">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel VerticalAlignment="Top" Margin="5,0,0,0" HorizontalAlignment="Center" Orientation="Horizontal">
<Label Content="Test" Visibility="Collapsed" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<Border BorderBrush="Black" Width="1">
<StackPanel x:Name="spTest1" />
</Border>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
MainWindow.xaml.cs
public MainWindow()
{
InitializeComponent();
DataContext = new MainWindowViewModel();
}
private void manualGrid_LoadingRowDetails(object sender, DataGridRowDetailsEventArgs e)
{
try
{
DataGridRow row = (DataGridRow)manualGrid.ItemContainerGenerator.ContainerFromIndex(e.Row.GetIndex());
DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(row);
DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(2);
StackPanel stackValue = GetVisualChild<StackPanel>(cell);
CheckBox ChkBox = new CheckBox();
ChkBox.IsChecked = true;
ChkBox.Margin = new Thickness(0, 7, 0, 0);
if (stackValue.Children.Count == 1)
stackValue.Children.Add(ChkBox);
}
catch (Exception)
{
throw;
}
}
public static T GetVisualChild<T>(Visual parent) where T : Visual
{
T child = default(T);
int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < numVisuals; i++)
{
Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
child = v as T;
if (child == null)
{
child = GetVisualChild<T>(v);
}
if (child != null)
{
break;
}
}
return child;
}
Что мне здесь не хватает?
Примечание: я только изучаю элементы управления WPF из Учебное пособие по WPF , получил оттуда пример кода и немного его изменил
Как текущий код, вы можете увидеть его здесь