我的內容控制「MyControl」,它有一個屬性「GlobalBackground」。 對於我有這樣的風格的項目。在屬性設置中綁定祖先
<ControlTemplate x:Key="XTemplate" TargetType="{x:Type local:MyControlItem}">
<Grid HorizontalAlignment="Stretch">
<Rectangle Height="2" Fill="{Binding GlobalBackground, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=local:MyControl}}"/>
...
</Grid>
</ControlTemplate>
<Style x:Key="XStyle" TargetType="{x:Type local:MyControlItem}">
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Template" Value="{StaticResource XTemplate}"/>
</Style>
這個按預期工作。
現在我想使用綁定到ItemsControl的不同屬性的相同模板。 這樣的想法是設置通過二傳手(風格觸發器) 一個屬性當我這樣做
<ControlTemplate x:Key="XTemplate" TargetType="{x:Type local:MyControlItem}">
<Grid HorizontalAlignment="Stretch">
<Rectangle Height="2" Fill="{TemplateBinding Background}"/>
...
</Grid>
</ControlTemplate>
<Style x:Key="XStyle" TargetType="{x:Type local:MyControlItem}">
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="Background" Value="{Binding GlobalBackground, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=local:MyControl}}" />
<Setter Property="Template" Value="{StaticResource XTemplate}"/>
</Style>
綁定失敗。
有沒有辦法在樣式設置器中使用FindAncestor綁定或我只是做錯了什麼?
曼弗雷德
你絕對可以做一個''RelativeSource' Binding'。如果你調試你的應用程序,Visual Studio中的輸出窗口會顯示你的綁定錯誤,這應該可以幫助你找到錯誤的底部。 –
@abe 是的,我知道 - 所以我找到了問題(但沒有解決方案)。 在第一種情況下,綁定就像一個魅力。 在第二種情況VS顯示「無祖先的類型..發現」 正如我在我對謝里登的答案中寫道,我猜測(不確定所有)WPF嘗試(如果用在setter中)解析綁定 - 而當我直接在模板中使用它,它解決了項目在項目控件內部的綁定,至少(當然)可以工作 – ManniAT