を見つけることができなかっRelativeSource検索を結合、ボタンのいくつかは、コンテンツのための画像のみを持って、他の人がテキストのみを持っています。 Button Imageのwidthプロパティを、派生したToolBarクラスのカスタムプロパティにバインドしようとしています。それは時々動作しますが、次のエラーで他の回失敗:ツールバー項目のDataTemplateが、私はボタンを含むツールバーを持つ親のツールバー
System.Windows.Dataエラー:4:「RelativeSource FindAncestor、AncestorType =」参照してバインディングのソースを見つけることができませんNuiWpfCore.Controls.ToolBar「AncestorLevel =」 1 ''。 BindingExpression:Path = IconSize; DataItem = null;ターゲット要素は 'Image'(Name = '')です。ターゲットプロパティは '幅'(タイプ 'Double')です。
ここには、失敗している要素バインディングを含むxamlがあります。 DataTemplateをインラインで作成されDataTemplateSelectorから返されます。ここでは
<pres:ToolBar x:Class="NuiWpfCore.Controls.ToolBar"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:pres="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:core="clr-namespace:NuiWpfCore"
xmlns:ctrls="clr-namespace:NuiWpfCore.Controls"
xmlns:select="clr-namespace:NuiWpfCore.Selectors"
xmlns:converters="clr-namespace:NuiWpfCore.Converters"
xmlns:diag="clr-namespace:System.Diagnostics;assembly=WindowsBase">
<ToolBar.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/NuiWpfCore;component/Controls/MenuBarTemplate.xaml" />
</ResourceDictionary.MergedDictionaries>
<converters:ListPairToStringConverter x:Key="ListPairToStringConverter" />
<converters:IconMetaDataToImageConverter x:Key="IconMetaDataToImageConverter" />
<converters:IconMetaDataToImageConverterParameter x:Key="IconToImageConverterParameter"
ConvertToImage="False" Width="16" Height="16" />
</ResourceDictionary>
</ToolBar.Resources>
<ToolBar.ItemTemplateSelector>
<select:ToolBarItemDataTemplateSelector>
<!-- other DataTemplates omitted for brevity -->
<select:ToolBarItemDataTemplateSelector.IconCommand>
<DataTemplate DataType="{x:Type core:PropertyElement}">
<Button IsEnabled="{Binding Path=CanEdit}" Command="{Binding}">
<Button.Content>
<Image
Width="{Binding Path=IconSize,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ctrls:ToolBar}} }"
Height="{Binding Path=Width,
RelativeSource={RelativeSource Self}}"
Source="{Binding Path=MetaData,
Converter={StaticResource IconMetaDataToImageConverter},
ConverterParameter={StaticResource IconToImageConverterParameter}}"/>
</Button.Content>
</Button>
</DataTemplate>
</select:ToolBarItemDataTemplateSelector.IconCommand>
<!-- other DataTemplates omitted for brevity -->
</select:ToolBarItemDataTemplateSelector>
</ToolBar.ItemTemplateSelector>
</pres:ToolBar>
は、バインディングのソースプロパティを持つツールバークラスです。
public partial class ToolBar : System.Windows.Controls.ToolBar, Views.IView
{
public ToolBar() : base()
{
InitializeComponent();
IconSize = 32;
}
public int IconSize { get; set; }
}
このツールバークラスは、時にはToolBarTray、それはありませんが、バインド、検索が特定のシナリオでは、両方のケースで失敗し、他の回で使用されています。
誰もが、これは失敗する可能性がある理由を任意のアイデアを持っていますか?
私は、テンプレートセレクタが適用されている場所を示すために、ファイルのほとんどが含まれるようにXAMLを更新しました。 – Hank
そこにあるものに基づいて、すべてが機能しているはずです。テンプレートは各アイテムに適用され、ToolBarのItemsPresenterの下のツリーに配置されます。私はあなたがそのイメージがレンダリングされている場所を正確に見ることができますし、なぜそれが親ツールバーに得ることができないので、ランタイムビジュアルツリーを見てスヌープを使用してお勧めします。 –