2015-12-22 143 views
1

我在放置在ContextMenu的MenuItem中的數據綁定有問題。 下面是一個簡單的例子,如何重現此問題:創建WPF數據綁定與MenuMenu中的MenuItem

<Window x:Class="test_app.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:test_app" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid Background="Black"> 
    <Grid.Resources> 
     <ContextMenu x:Key="PART_ContextMenu" > 
      <MenuItem Header="Element" Foreground="DarkGreen"> 
       <MenuItem.Icon> 
        <Rectangle Width="20" Height="20" Fill="{Binding Foreground, RelativeSource={RelativeSource AncestorType=MenuItem}}" /> 
       </MenuItem.Icon> 
      </MenuItem> 
     </ContextMenu> 

     <Menu x:Key="PART_Menu"> 
      <MenuItem Header="Element" Foreground="DarkGreen"> 
       <MenuItem.Icon> 
        <Rectangle Width="20" Height="20" Fill="{Binding Foreground, RelativeSource={RelativeSource AncestorType=MenuItem}}" /> 
       </MenuItem.Icon> 
      </MenuItem> 
     </Menu> 
    </Grid.Resources> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="20"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 

    <StaticResource ResourceKey="PART_Menu" /> 
    <TextBlock Grid.Row="1" Text="test Text" Foreground="White" ContextMenu="{StaticResource PART_ContextMenu}"/> 


</Grid> 

兩個菜單爲網格的資源,以確保它的工作方式相同。 我想將MenuItem的Foreground畫筆綁定到圖標的填充畫筆。這適用於菜單,但不適用於ContextMenu。沒有綠色的矩形。如果我用一種顏色代替綁定。 我添加以下行主窗口c'tor以獲取更多信息

System.Diagnostics.PresentationTraceSources.DataBindingSource.Switch.Level = System.Diagnostics.SourceLevels.Critical; 

但WPF沒有報告任何數據綁定錯誤,警告或信息。 任何人都可以解釋這裏發生了什麼?

乾杯

回答

1

運行你的例子(VS2015更新1)我看到一個報道綁定錯誤時:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.MenuItem', AncestorLevel='1''. BindingExpression:Path=Foreground; DataItem=null; target element is 'Rectangle' (Name=''); target property is 'Fill' (type 'Brush')

TextBlock中的更改的StaticResource到DynamicResource,它按預期工作。但是,我不知道爲什麼!

+0

我的系統中也沒有錯誤。但改用DynamicResource解決了這個問題。 – AnjumSKhan