【发布时间】:2022-01-06 14:11:23
【问题描述】:
我有一个包含 Datagrid 的 UserControl。在 Datagrid 中,我使用具有用于复制/粘贴命令的 ContextMenu 的文本框设置了 EditingElementStyle。我需要为复制/粘贴实现自定义命令,最好从 ViewModel 执行命令。
这是我的带有数据网格的用户控件:
<UserControl x:Class="My_project.View.SearchEmployees"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:ctl="clr-namespace:My_project.Controls"
x:Name="_search">
<Grid>
//... Other controls
<ctl:My_dataGrid ItemsSource="{Binding Employees}">
<DataGrid.Columns>
<DataGridTextColumn Width="130" Header="Name" Binding="{Binding NAME}">
<DataGridTextColumn.EditingElementStyle>
<Style TargetType="TextBox" BasedOn="{StaticResource Txt_dgv}">
<Setter Property="Tag" Value="{Binding DataContext,
ElementName=_search}"/> <!--doesn't work-->
</Style>
</DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</ctl:My_dataGrid>
</Grid>
</UserControl>
我的带有 ContextMenu 的自定义文本框:
<Style TargetType="{x:Type TextBox}" x:Key="Txt_dgv">
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Grid>
<Border BorderBrush="Silver" BorderThickness="0,0,0,1"
Background="Transparent" SnapsToDevicePixels="True">
<ScrollViewer x:Name="PART_ContentHost" Focusable="False"
HorizontalScrollBarVisibility="Hidden"
VerticalAlignment="Center"
VerticalScrollBarVisibility="Hidden" />
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu >
<MenuItem Command="{Binding Path=PlacementTarget.Tag.COPY_COMMAND,
RelativeSource={RelativeSource AncestorType=ContextMenu}}" <!--doesn't work-->
Header="Copy" />
<MenuItem Command="{Binding Path=PlacementTarget.Tag.PASTE_COMMAND,
RelativeSource={RelativeSource AncestorType=ContextMenu}}" <!--doesn't work-->
Header="Paste" />
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
在上面的示例中,我使用 Textbox Tag 属性来设置 UserControl 的 DataContext,然后将其设置为 ContextMenu 的 DataContext。
但是输出什么都不是——甚至没有错误。我猜这必须与 ContextMenu 不是 Visual Tree 的一部分,并且 Textbox 在其中太深的事实有关。
有人对如何解决这个问题有更好的想法吗?
【问题讨论】:
-
在
EditingElementStyle中没有可以绑定的元素_search。 -
@mm8 - 为什么,EditingElementStyle 也不是 Visual Tree 的一部分?还有什么我可以尝试的吗?
-
请看我的回答。
标签: c# wpf mvvm contextmenu