我有一個名爲item的類,它只包含兩個屬性。我將在屏幕上將它們顯示爲具有樣式的按鈕。這個問題涉及我如何根據IsSelected值來設置按鈕的樣式,當我想要影響的元素的樣式不是數據模板時。我已經嘗試過使用觸發器,但無法啓動它。使用數據模板中的樣式
該課程如下。
public class Item : ObservableObject
{
private string _title;
private bool _isSelected;
public string Title
{
get { return _title; }
set
{
_title = value;
RaisePropertyChanged("Title");
}
}
public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected = value;
RaisePropertyChanged("IsSelected");
}
}
}
我使用數據模板在ItemsControls中顯示這些項目。
<ItemsControl ItemsSource="{Binding Path=Items}" ItemTemplate="{StaticResource ResourceKey=ItemTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
使用以下樣式和數據模板。
<Style x:Key="ItemButton" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Name="ButtonBorder" BorderThickness="2,2,2,0" BorderBrush="#AAAAAA" CornerRadius="6,6,0,0" Margin="2,20,0,0" Background="Black">
<ContentPresenter
VerticalAlignment="Center"
HorizontalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<DataTemplate x:Key="ItemTemplate">
<Button Height="60" Style="{StaticResource ItemButton}" Name="Button">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Title}"
HorizontalAlignment="Left" Margin="5,5,5,3" FontSize="25" Foreground="#6B6B6B" FontFamily="Arial" />
<Button Style="{StaticResource NoChromeButton}" Margin="0,0,5,0">
<Button.Content>
<Image Height="20" Source="/WpfApplication1;component/Image/dialogCloseButton.png"></Image>
</Button.Content>
<Button.ToolTip>
Close
</Button.ToolTip>
</Button>
</StackPanel>
</Button>
</DataTemplate>
我需要在IsSelected爲True時將對象Item中的「ButtonBorder」背景從黑色更改爲白色。
我已經在觸發加在數據模板 這是不行的,我想它,因爲樣式覆蓋DataTemplate中,因此背景保持白色。但是,當我嘗試在樣式中執行觸發器時,我無法訪問IsSelected屬性?
的DataTemplate觸發
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsSelected}" Value="True">
<Setter TargetName="Button" Property="Background" Value="White"/>
</DataTrigger>
</DataTemplate.Triggers>
風格觸發
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected}" Value="True">
<Setter Property="Background" Value="White"/>
</DataTrigger>
</Style.Triggers>
我這麼想嗎?
如果'ItemButton'僅用於'Item'對象,那麼你爲什麼不只是鞏固風格融入'Item'的DataTemplate? –
這是一個公平的評論,我已經習慣了將所有東西都分開到個人資源的習慣,不確定它是否是一種好習慣,但我堅持認爲:) – JonWillis
@jberger它也使得資源和UI佈局更易於閱讀並修改它們是否與內嵌模板和樣式不混淆。 – Rachel