【问题标题】:WPF ContextMenu bind MenuItem Icon to MenuItem HeaderWPF ContextMenu 将 MenuItem 图标绑定到 MenuItem 标头
【发布时间】:2012-04-19 12:41:11
【问题描述】:

请解释为什么这不起作用..

 <ContextMenu>     
      <MenuItem>
          <MenuItem.Header>
               <TextBox Name="tbColor" Text="Black" />
          </MenuItem.Header>
          <MenuItem.Icon>
               <TextBox Text="{Binding ElementName=tbColor,Path=Text}" />
          </MenuItem.Icon>                                                                    
      </MenuItem>
 </ContextMenu>

我尝试了几种方法,但没有。 RelativeSource 不起作用..

编辑..从另一个控件绑定..

<DataGrid Foreground="{Binding ElementName=tbColor,Path=Text,Converter={StaticResource textToBrushConverter}}">          
        <DataGrid.ContextMenu>
            <ContextMenu>....             

【问题讨论】:

  • 为什么您认为可以将TextBox 添加到需要Image 的属性?
  • 我不希望有图像。你可以在那里放置任何你想要的控件。在原始代码中,将使用转换器根据您在标题文本框中输入的内容更改颜色。

标签: .net wpf data-binding contextmenu


【解决方案1】:

通过MSDN 快速浏览一下ContextMenuMenuItemHeaderedItemsControl,看起来您可以在MenuItem Header 中添加任何您想要的内容。仔细检查表明情况并非如此。 MenuItemHeader 属性实际上是在寻找一个字符串。您可以在Header 中放置TextBlock,但不是TextBox

虽然我没有深入研究它,但我怀疑MenuItem 对象的Icon 属性也是如此(除了图像)。

【讨论】:

  • 我可以在标题中明确设置我想要的任何控件。我还可以从 contextMenu 之外的控件绑定到 texbox。
【解决方案2】:

让原始代码像这样工作..丑陋但出于我自己的理智..

<MenuItem.Header>
   <TextBox Name="tbColor" Text="Black" TextChanged="tbColor_TextChanged" />
</MenuItem.Header>
<MenuItem.Icon>
   <Rectangle Name="rectangleColor" Width="20" Height="20" />
</MenuItem.Icon>

在后面的代码中..

private void tbColor_TextChanged(object sender, TextChangedEventArgs e)
    {
        try
        {
            rectangleColor.Fill = new SolidColorBrush((Color) ColorConverter.ConvertFromString(((TextBox) sender).Text));
        }
        catch (Exception)
        {
            return;
        }
    }

【讨论】:

    【解决方案3】:

    控件可视化树之外的上下文菜单,因此无法找到元素名称。 试一试——

    {绑定 PlacementTarget,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}"

    【讨论】:

    • 之前尝试过不同的变体,但我没有工作。你也不应该能够在同一个控件内绑定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2010-11-04
    • 2020-02-11
    • 2016-10-18
    • 1970-01-01
    相关资源
    最近更新 更多