2016-08-09 78 views
0

我正在尝试学习WPF,并且似乎遇到了一个我实际上并不完全理解的错误。使用RibbonComboBox无法找到绑定参考的源代码

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.Ribbon.RibbonWindow', AncestorLevel='1''. BindingExpression:Path=WindowState; DataItem=null; target element is 'Ribbon' (Name=''); target property is 'NoTarget' (type 'Object') 
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.Ribbon.RibbonWindow', AncestorLevel='1''. BindingExpression:Path=IsActive; DataItem=null; target element is 'Ribbon' (Name=''); target property is 'NoTarget' (type 'Object') 

这里是我的XAML的一部分。我无法分辨这些错误是否刚刚开始,但我一直在调整可用于主页标题下的两个RibbonComboBoxe es的代码。 (<Ribbon>元素位于<Grid>元素中。)

任何人都可以帮助我尝试解决此问题吗?代码的行为不正确,我无法判断这个错误是否相关。

<Ribbon> 
    <Ribbon.ApplicationMenu> 
     <RibbonApplicationMenu> 
      <RibbonApplicationMenuItem Header="_Preview" ImageSource="Images/preview.png"></RibbonApplicationMenuItem> 
      <RibbonSeparator></RibbonSeparator> 
      <RibbonApplicationMenuItem Name="Save" KeyTip="S" Header="_Save" ImageSource="Images/save.png" ToolTipTitle="Save" ToolTipDescription="Save the current article and keep editing" Click="Save_Click"></RibbonApplicationMenuItem> 
      <RibbonSeparator></RibbonSeparator> 
      <RibbonApplicationMenuItem Name="SaveAndExit" KeyTip="X" Header="Save and E_xit" ToolTipTitle="Save and Exit" ToolTipDescription="Save the current article and close window" Click="SaveAndExit_Click"></RibbonApplicationMenuItem> 
      <RibbonApplicationMenuItem Name="AbortAndExit" Header="_Abort Edit" ToolTipTitle="Abort Edit" ToolTipDescription="Close window without saving changes to this article" Click="AbortAndExit_Click"></RibbonApplicationMenuItem> 
     </RibbonApplicationMenu> 
    </Ribbon.ApplicationMenu> 
    <RibbonTab Header="Home"> 
     <RibbonGroup Header="Category"> 
      <RibbonComboBox Label="Category:" SelectionBoxWidth="250"> 
       <RibbonGallery SelectedItem="{Binding Path=Categories.SelectedItem}"> 
        <RibbonGalleryCategory IsSharedColumnSizeScope="True" DisplayMemberPath="Text" ItemsSource="{Binding Path=Categories.Items}"> 
        </RibbonGalleryCategory> 
       </RibbonGallery> 
      </RibbonComboBox> 
      <RibbonComboBox Label="Subcategory:" SelectionBoxWidth="250"> 
       <RibbonGallery SelectedItem="{Binding Path=Subcategories.SelectedItem}"> 
        <RibbonGalleryCategory IsSharedColumnSizeScope="True" ColumnsStretchToFill="True" MaxColumnCount="1" DisplayMemberPath="Text" ItemsSource="{Binding Path=Subcategories.Items}"> 
        </RibbonGalleryCategory> 
       </RibbonGallery> 
      </RibbonComboBox> 
      <RibbonButton Label="Edit Categories" Command="local:EditCommands.Categories" SmallImageSource="Images\categories_sm.png" ToolTipTitle="Edit Categories" ToolTipDescription="Add, edit or delete categories and subcategories" ToolTipImageSource="Images\categories_sm.png"></RibbonButton> 
     </RibbonGroup> 
     <RibbonGroup Header="Author"> 
      <RibbonTwoLineText Text="[email protected]"></RibbonTwoLineText> 
      <RibbonButton Label="Set Author" Command="local:EditCommands.Header1" SmallImageSource="Images\h1_sm.png" ToolTipTitle="Header 1" ToolTipDescription="Format selected text as a level 1 header" ToolTipImageSource="Images\h1.png"></RibbonButton> 
     </RibbonGroup> 
     <RibbonGroup Header="Settings"> 
      <RibbonCheckBox Name="chkApproved" Label="Approved"></RibbonCheckBox> 
      <RibbonCheckBox Name="chkDeprecated" Label="Deprecated"></RibbonCheckBox> 
      <RibbonButton Name="btnMetadata" Label="Metadata" SmallImageSource="Images\metadata_sm.png" ToolTipTitle="Metadata" ToolTipDescription="Edit article metadata" ToolTipImageSource="Images\metadata.png" Click="btnMetadata_Click"></RibbonButton> 
     </RibbonGroup> 
     <RibbonGroup Header="History"> 
      <RibbonButton Label="Edit Updates" Command="local:EditCommands.EditHistory" SmallImageSource="Images\history_sm.png" LargeImageSource="Images\history.png" ToolTipTitle="Edit Updates" ToolTipDescription="Edit update history for this article"></RibbonButton> 
     </RibbonGroup> 
    </RibbonTab> 

UPDATE:

基于IlVic的回答,我改变了我的WindowRibbonWindow。但是,我收到以下错误。

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

回答

1

您的问题是由您的Ribbon控件造成的。如果你看一下它的默认样式(可以使用ILSpy),你会发现这MultiDataTrigger

<rd:MultiDataTrigger> 
    <rd:MultiDataTrigger.Conditions> 
     <rd:Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ribbon:RibbonWindow}, Path=IsActive}" Value="False" /> 
     <rd:Condition Binding="{Binding Path=(SystemParameters.IsGlassEnabled)}" Value="False" /> 
     <rd:Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsHostedInRibbonWindow}" Value="True" /> 
    </rd:MultiDataTrigger.Conditions> 
    <rd:Setter TargetName="PART_TitleHost" Value="{windows:DynamicResource {x:Static SystemColors.InactiveCaptionTextBrushKey}}" Property="TextElement.Foreground" /> 
</rd:MultiDataTrigger> 

正如你可以看到它的第一条件是在寻找一个祖先类型为RibbonWindow。 您会很容易地找到另一个MultiDataTrigger,作为查找控件的属性的条件。

我想你的XAML放在一个正常的窗口内。因此,你需要用一个RibbonWindow,像更换Window对象:

<rib:RibbonWindow 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:rib="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary" 
     x:Class="[yourWindowClassName]"> 
    <!-- Put your Ribbon Control somewhere here --> 
</rib:RibbonWindow> 

我希望它能帮助。

+0

谢谢,我不知道我需要那个。我仍然需要学习一些关于WPF和XAML的知识。我已经将你的答案标记为正确的答案,但如果你不介意看一看,我现在在更改后会得到类似但不同的错误。 RibbonGalleryItem是我必须手动添加到我的XAML中的元素吗? –

+0

我很抱歉@JonathanWood,但我无法重现你的第二个问题。可能您应该为您的XAML和您的代码添加更多细节(也许您可以考虑创建一个新问题)。 –

相关问题