WPF文本菜单绑定菜单项的图标到菜单项头

问题描述:

请解释为什么不到风度工作..WPF文本菜单绑定菜单项的图标到菜单项头

<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>....    
+3

为什么你认为你可以添加一个'TextBox'到一个需要'Image'的属性? – slugster 2012-04-19 12:47:47

+0

我不希望有图像。你可以放置你想要的任何控制。在原始代码中,根据您使用转换器在标题文本框中输入的内容,将会有一个矩形更改颜色。 – jrb 2012-04-19 12:52:03

得到了原代码的工作这样的..丑,但我自己的理智..

<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; 
     } 
    } 

就让我们来看看通过MSDNContextMenuMenuItemHeaderedItemsControl使它看起来像你可以把你想要的任何东西在MenuItemHeader。更仔细的检查表明情况并非如此。 MenuItemHeader属性实际上是查找字符串。您可以在Header内放置TextBlock,但不能放入TextBox

虽然我没有深入研究过,但我怀疑MenuItem对象的Icon属性是一样的(除了图片)。

+0

我可以明确地设置我想在标题中的任何控件。我也可以通过contextMenu之外的控件绑定到texbox。 – jrb 2012-04-19 13:56:19

您的控件的可视化树之外的上下文菜单无法找到元素名称。 尝试 -

{结合PlacementTarget,的RelativeSource = {的RelativeSource FindAncestor, AncestorType = {X:类型文本菜单}}}”

+1

之前尝试过不同的变化,但我没有工作。你也不应该能够在同一个控件中绑定。 – jrb 2012-04-19 13:58:13