4
ControlTemplate如何處理datacontext?ControlTemplates的Datacontext
使用後續的模板
<ControlTemplate x:Key="ToolbarButtonHover" TargetType="Button">
<Grid Name="backgroundGrid">
<Image Source="{DynamicResource ResourceKey=Img}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"></Image>
</Grid>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding Path=DataContext.ToolSelected, RelativeSource={RelativeSource TemplatedParent}}" Value="Unlink">
<Setter TargetName="backgroundGrid" Property="Background" Value="Red" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
與控制
<Button Content="Button"
Template="{StaticResource ResourceKey=ToolbarButtonHover}"
Height="24" Width="24" Background="Red">
<Button.Resources>
<ImageSource x:Key="Img">Resources/Icons/toolSelect.png</ImageSource>
</Button.Resources>
</Button>
但是,這並不使背景的紅色。我已經驗證ToolbarViewModel屬性ToolSelected
的值實際上是通過在控件旁邊有<Label Content="{Binding ToolSelected}"/>
來取消鏈接。所以我相信問題是模板不使用正確DataContext
,但我不確定這一點。這就是爲什麼我要求你幫忙。
控件位於一個自定義的用戶控件中,ToolbarViewModel被設置爲所有它的上下文,就像這樣。
<UserControl.DataContext>
<local:ToolboxView/>
</UserControl.DataContext>
什麼是ToolSelected的類型? – franssu
'ControlTemplate'覆蓋所有對象的屬性。因此,一旦你爲你的按鈕設置了一個ControlTemplate,給它一個Background就沒有意義了...... –
他並沒有給按鈕賦予背景,而是給ControlTemplate裏面的Grid。另外如果你使用TemplateBinding,給一個重新模板化控件的背景是完全沒問題的。 – franssu