2010-05-25 22 views
7

Menü öğesi ciltleme neden çalışmadığını bilen var mı?WPF MenuItem IsChecked Ciltleme çalışmıyor

<ToggleButton Name="toggleButton" Checked="checkBoxPublish_Checked" > 
    <ToggleButton.Resources> 
     <converters:BooleanToHiddenVisibility x:Key="boolToVis"/> 
    </ToggleButton.Resources> 
    <Grid> 
     <Image Height="auto" HorizontalAlignment="Left" Margin="5" Name="image1" Stretch="Fill" VerticalAlignment="Top" Width="auto" /> 
     <Viewbox > 
      <TextBlock Text="Blocked" Opacity="0.7" Foreground="Red" Visibility="{Binding Path=IsChecked, ElementName=toggleButton, Converter={StaticResource boolToVis}}"/> 
     </Viewbox> 
    </Grid> 
    <ToggleButton.ContextMenu> 
     <ContextMenu StaysOpen="True" > 
      <MenuItem x:Name="menuItemBlock" Header="Block" Click="menuItemClick" IsCheckable="True" IsChecked="{Binding ElementName=toggleButton, Path=IsChecked}"/> 
      <MenuItem x:Name="menuItemIgnorePtz" Header="Ignore Ptz" Click="menuItemClick" IsCheckable="True" /> 
     </ContextMenu> 
    </ToggleButton.ContextMenu> 
</ToggleButton> 

cevap

8

Ben onunla bağlama verileri kullanarak sorunun var contextmenu olduğunu tahmin ediyorum.

o elementName kullanarak ToggleButton'a bulmak Eğer VS çıktı penceresinde bağlayıcı bunun için bir hata alıyorum neden bu http://blogs.msdn.com/b/mikehillberg/archive/2008/05/23/of-logical-and-visual-trees-in-wpf.aspx

göremiyorum böylece ToggleButton contextmenu mantıksal ağacında değil:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=toggleButton'. BindingExpression:Path=IsChecked; DataItem=null; target element is 'MenuItem' (Name='menuItemBlock'); target property is 'IsChecked' (type 'Boolean')

, düzeltmek kullanarak geçiş düğmesi aramak için FindAncestor: Ben ilk bunu okuduğunda

<MenuItem 
    Header="Block" 
    IsCheckable="True" 
    IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ContextMenu}, Path=PlacementTarget.IsChecked}" /> 
+1

, sana * Lütfen veriler bağlanmasına * ki fark etmedi ContextMenu.PlacementTarget özelliği aracılığıyla (bunun yerine, RelativeSource uzantısından kaynaklanan başka bir şey), kontrolün görsel ağacına geri dönmenin yolu budur. Ancak, bu muhtemelen sadece biraz yavaş ve ben şimdi aldım (ve benim sorunumu düzeltildi). Yardım için teşekkürler. +1. –

İlgili konular