我有一個包含 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 在其中太深的事實相關聯。
有人對如何解決這個問題有更好的想法嗎?
uj5u.com熱心網友回復:
您不能系結到_search使用該ElementName屬性,因為它屬于不同的XAML 名稱范圍。
您可以使用該屬性系結到UserControl's :DataContextRelativeSource
<Setter Property="Tag" Value="{Binding DataContext,
RelativeSource={RelativeSource AncestorType=UserControl}}"/>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/408090.html
標籤:
