2010-05-25 16 views
7

कोई भी जानता है कि मेनू आइटम बाध्यकारी क्यों काम नहीं करता है?WPF MenuItem Ischecked बाध्यकारी काम नहीं कर रहा

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

उत्तर

8

मेरा अनुमान है कि यह है कि यह ContextMenu आप समस्या है के साथ बाध्यकारी डेटा का उपयोग कर रहा है।

तो यह ToggleButton ElementName का उपयोग नहीं कर पा सकते हैं, को देखने के http://blogs.msdn.com/b/mikehillberg/archive/2008/05/23/of-logical-and-visual-trees-in-wpf.aspx

है यही कारण है कि आप वी.एस. में अपने उत्पादन विंडो में बाध्यकारी है कि के लिए कोई त्रुटि मिलती है ToggleButton ContextMenu की तार्किक पेड़ में नहीं है:

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')

, ठीक करने के लिए का उपयोग कर टॉगल बटन को देखने FindAncestor:

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

जब मैं पहली बार इस पढ़ा है, मुझे नहीं पता था कि तुम * अपने datas करने के लिए बाध्य करने के लिए * है ContextMenu.PlacementTarget प्रॉपर्टी के माध्यम से हमारा स्वागत है (इसके बजाय, सापेक्ष स्रोत एक्सटेंशन के माध्यम से सोर्स किया गया कुछ भी), क्योंकि यह नियंत्रण नियंत्रण के दृश्य पेड़ पर वापस जाने का तरीका है। हालांकि, शायद मैं बस थोड़ा धीमा था और अब मुझे मिल गया है (और मेरी समस्या तय की गई है)। सहायता के लिए धन्यवाद। +1। –

संबंधित मुद्दे