无法找到与参考绑定的源
本文关键字:绑定 参考 | 更新日期: 2023-09-27 18:01:20
我正在尝试学习WPF,似乎得到一个错误,我真的不完全理解。
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的一部分。我不知道错误是否刚刚开始,但我一直在调整与Home标题下的两个RibbonComboBoxe
e一起工作的代码。(<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="jwood@softcircuits.com"></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>
更新:
根据IlVic的回答,我把我的Window
换成了RibbonWindow
。但是我得到了以下错误:
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')
您的问题是由您的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
,它作为一个条件,寻找RibbonWindow
控件的WindowState
属性。
我猜你的XAML是放在一个正常的窗口。因此,您需要将Window
对象替换为RibbonWindow
对象,例如:
<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>