gpt4 book ai didi

wpf - 将 ContextMenu 属性绑定(bind)到所有者属性

转载 作者:行者123 更新时间:2023-12-03 13:41:01 27 4
gpt4 key购买 nike

我在将上下文菜单绑定(bind)到文本框的附加属性时遇到问题。所以我有 TextBox,它在右键单击时有一个上下文菜单。那么如何将上下文菜单的属性绑定(bind)到 WPF XAML 中 TextBox 的附加属性呢?在这里我尝试绑定(bind)到 TextBox 但它没有帮助

 <Style x:Key="DefaultTextBox" TargetType="{x:Type TextBox}">
<Setter Property="BorderBrush" Value="{DynamicResource ThemeSecondary}"/>
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu x:Name="uiContexMenu">
<ContextMenu.ItemsSource>
<CompositeCollection>
<MenuItem Command="Cut" Header="Cut">
<MenuItem.Icon>
<Viewbox Width="16" Height="16">
<TextBlock FontFamily="{DynamicResource IconFont}" Text=""/>
</Viewbox>
</MenuItem.Icon>
</MenuItem>
<MenuItem Command="Copy" Header="Copy">
<MenuItem.Icon>
<Viewbox Width="16" Height="16">
<TextBlock FontFamily="{DynamicResource IconFont}" Text=""/>
</Viewbox>
</MenuItem.Icon>
</MenuItem>
<MenuItem Command="Paste" Header="Paste">
<MenuItem.Icon>
<Viewbox Width="16" Height="16">
<TextBlock FontFamily="{DynamicResource IconFont}" Text=""/>
</Viewbox>
</MenuItem.Icon>
</MenuItem>
<CollectionContainer Collection="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=TextBox}, Path=Extensions.ExtendCommands}"/>
</CompositeCollection>
</ContextMenu.ItemsSource>
</ContextMenu>
</Setter.Value>
</Setter>

我的附加属性(property):
 #region ExtendCommands dependency property

public static IEnumerable GetExtendCommands(DependencyObject obj)
{
return (IEnumerable)obj.GetValue(ExtendCommandsProperty);
}

public static void SetExtendCommands(DependencyObject obj, IEnumerable value)
{
obj.SetValue(ExtendCommandsProperty, value);
}

// Using a DependencyProperty as the backing store for ExtendCommands. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ExtendCommandsProperty =
DependencyProperty.RegisterAttached("ExtendCommands", typeof(IEnumerable), typeof(Extensions), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.Inherits));

#endregion

谢谢

最佳答案

坏消息:
CollectionContainer 没有 DataContext。在绑定(bind)中,您只能使用 Source={x:reference XXX}。 XXX 必须在您的样式/资源字典之外进行初始化。

你可以做什么:

要将具有 DataContext 的内容绑定(bind)到 TextBox 的附加属性是:
将 TextBox 设置为 ContextMenu 的 DataContext。
因此,您可以使用 PlacementTarget 属性,因为您的上下文菜单卡在您的 TextBox 上。此外,您通常可以绑定(bind)。

<ContextMenu x:Name="uiContexMenu" DataContext="{Binding Path=PlacementTarget, RelativeSource={RelativeSource Self}}">

<ComboBox ItemsSource="{Binding Path=(local:Extensions.ExtendCommands)}"/>
...
</ContextMenu>

当然你必须设置你的附加属性:
xmlns:sys="clr-namespace:System;assembly=mscorlib"
<TextBox Text="***" Style="{StaticResource DefaultTextBox}">
<local:Extensions.ExtendCommands>
<x:Array Type="{x:Type sys:String}">
<sys:String>Text 1</sys:String>
<sys:String>Text 2</sys:String>
<sys:String>Text 3</sys:String>
</x:Array>
</local:Extensions.ExtendCommands>
</TextBox>

关于wpf - 将 ContextMenu 属性绑定(bind)到所有者属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39545318/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com