我有下面的按鈕XAML動態更新WPF數據模板
<Button Name="btnLogoff" DockPanel.Dock="Left" Click="btnToolbar_Click" CommandParameter="LOGOFF"
Template="{DynamicResource ToolbarButton}"
Style="{StaticResource ToolbarButtonDisplay}" z:ButtonProperties.Image="..\..\Resources\Images\Logoff.GIF" Content="Logoff">
</Button>
ButtonProperties如下
public class ButtonProperties
{
public static ImageSource GetImage(DependencyObject obj)
{
return (ImageSource) obj.GetValue(ImageProperty);
}
public static void SetImage(DependencyObject obj, ImageSource value)
{
obj.SetValue(ImageProperty, value);
}
public static readonly DependencyProperty ImageProperty = DependencyProperty.RegisterAttached("Image", typeof(ImageSource), typeof(ButtonProperties), new UIPropertyMetadata((ImageSource)null));
}
的正常工作,給我的按鈕模板我可以在整個應用程序使用有一個圖像和文本組件。
我想要做的就是在某些後臺線程方法上動態地將ToolbarButton的樣式更改爲ToolbarButtonRed,比如通知用戶事件即將發生,按鈕將變爲紅色樣式。這兩種樣式都在XAML頁面的資源中,但我不知道如何以編程方式更改模板。
我已經試過..
public DataTemplate AlarmTemplate
{
get
{
if (_alarmTemplate != null)
return _alarmTemplate;
else
return (DataTemplate)_parent.FindResource("ToolbarButton");
}
set
{
_alarmTemplate = value;
OnPropertyChanged("AlarmTemplate");
}
}
private void SetAlarmIcon(bool red)
{
if (red)
AlarmTemplate = (DataTemplate)_parent.FindResource("ToolbarButtonRed");
else
AlarmTemplate = (DataTemplate)_parent.FindResource("ToolbarButton");
}
並綁定XAML這樣
,但沒有喜悅。該按鈕甚至不顯示。有什麼建議麼?
UPDATE:
風格低於
<Style x:Key="ToolbarButtonDisplay" TargetType="Button">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Vertical">
<Image Source="{Binding Path=(Windows:ButtonProperties.Image), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}" Margin="0,2,0,0" Width="32"/>
<TextBlock FontSize="9" FontWeight="Normal" FontFamily="Arial" Foreground="White" HorizontalAlignment="Center" Margin="2,2,2,2">
<ContentPresenter Content="{Binding Path=Content, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}"></ContentPresenter>
</TextBlock>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsEnabled}" Value="True">
<Setter Property="Template" Value="{StaticResource ToolbarButtonRed}"/>
</DataTrigger>
</Style.Triggers>
</Style>
最後更新 - 我有一個觸發如下
<Style.Triggers>
<DataTrigger Binding="{Binding Path=DisplayToolbar}" Value="True">
<Setter Property="Template" Value="{DynamicResource ToolbarButtonRed}"/>
</DataTrigger>
</Style.Triggers>
上班只要使用上的datacontext(DisplayToolbar)任意財產我不知道如何做到這一點特定於一個按鈕。爲了解釋,我在頁面上有大約30個按鈕,它們都使用相同的樣式,因此使用相同的觸發器,因此上面的代碼將全部設置爲紅色。我需要一種方法來讓每個按鈕鍛鍊IT和IT是否應該是紅色的,所以我正在考慮設置按鈕控件的某些屬性(如果有我可以使用的),並讓數據觸發器查看按鈕屬性,而不是datacontexts。什麼是綁定到按鈕自己的屬性,而不是datacontext的語法?
對不起,我應該指定的ToolBarButton和ToolbarButtonRed是CONTROLTEMPLATES,沒有風格 – NZJames
如果我理解正確的問題,編輯應該是你所需要的。 – Andy
我試圖通過MVVM做到這一點,所以如果可能的話避免直接的btn屬性更改,最好是更新一個依賴項屬性,然後會影響GUI。你可以不使用調度程序調用來更新GUI線程上的依賴項屬性嗎?因爲這是我最初的做法,但那並不奏效。另外,我已經發布了上面的按鈕樣式定義,並通過數據觸發器添加到塊中,這可能嗎?我做了什麼錯誤,因爲它似乎沒有工作。 – NZJames