我有DataGrid
,在每個DataGridRow
我有行詳細信息,其中包含幾個控件。如何停止DataGridRow選擇如果在RowDetails中點擊鼠標
我想要什麼,如果有的話則點擊該行的細節裏面:
- 不選擇該行,或者更準確地說,
- 更改現有DataGrid
選擇。
我正在考慮處理PreviewMouseDown和MouseDown事件的行爲,不知怎的,使DataGrid跳過選擇過程,但不知道如何繼續。
最後,我將在具有更多信息的細節中使用TabControl,因此我也不希望TabItem單擊來更改DataGrid的現有選擇。
會不會有一種方法來啓動PreviewMouseDown的隧道在電網「DetailsContainer」級別和網格「DetailsContainer」停止的MouseDown的冒泡水平
<DataGrid Name="dgAudit"
CanUserReorderColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserResizeColumns="False"
CanUserResizeRows="False"
CanUserSortColumns="False"
IsReadOnly="True"
ItemsSource="{Binding GEOM_ASSET_OC_LIST}"
VirtualizingPanel.ScrollUnit="Pixel"
RowDetailsVisibilityMode="Visible"
>
<i:Interaction.Behaviors>
<behaviors:DataGridBehaviors />
</i:Interaction.Behaviors>
<DataGrid.Columns>
<DataGridTextColumn Header="Asset ID" Binding="{Binding ASSET_ID}" Width="200" />
<DataGridTextColumn Header="Asset Type" Binding="{Binding ASSET_TYPE}" Width="200" />
<DataGridTextColumn Header="Last Update By" Binding="{Binding LAST_UPDATE_BY}" Width="150" />
<DataGridTextColumn Header="Last Update Date" Binding="{Binding LAST_UPDATE_DATETIME, StringFormat=\{0:dd.MM.yy HH:mm:ss tt\}}" Width="150" />
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<Grid Name="DetailsContainer">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Name Text="{Binding Notes}" Width="400" HorizontalAlignment="Left" TextWrapping="Wrap"/>
<Button Content="Button" Grid.Column="1" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
</Grid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
只是一個快速模擬出一個空的行爲
public class DataGridBehaviors : Behavior<DataGrid>
{
protected override void OnAttached()
{
base.OnAttached();
this.AssociatedObject.MouseDown += DataGrid_MouseDown;
this.AssociatedObject.PreviewMouseDown += DataGrid_PreviewMouseDown;
}
protected override void OnDetaching()
{
this.AssociatedObject.PreviewMouseDown -= DataGrid_PreviewMouseDown;
this.AssociatedObject.MouseDown -= DataGrid_MouseDown;
base.OnDetaching();
}
private void DataGrid_MouseDown(object sender, MouseButtonEventArgs e)
{
}
private void DataGrid_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
DependencyObject obj = (DependencyObject)e.OriginalSource;
DataGridDetailsPresenter RowsDetails = FindParent<DataGridDetailsPresenter>(obj);
if (RowsDetails != null)
{
//Skip over selection, maybe temporarily removed native selection handler???
}
}
public static T FindParent<T>(DependencyObject child) where T : DependencyObject
{
//get parent item
DependencyObject parentObject = VisualTreeHelper.GetParent(child);
//we've reached the end of the tree
if (parentObject == null) return null;
//check if the parent matches the type we're looking for
T parent = parentObject as T;
if (parent != null)
return parent;
else
return FindParent<T>(parentObject);
}
private static T GetVisualChild<T>(DependencyObject 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;
}
}
可能包括寫只讀屬性設置爲「真」 –