将XAML样式转换为样式背后的代码?

时间:2011-11-02 03:11:53

标签: c# wpf xaml

我有一个列表框,其选择颜色是默认的纯蓝色。我读过这篇文章“如何更改WPF ListBox SelectedItem颜色?” here。我想创建它给出的代码后面的代码。这样我就可以将这个样式分配给我的Listbox ItemContainerStyle属性。

喜欢

样式s = ......

MyListBox.ItemContainerStyle = s;

我想在后面的代码中进行此操作,因为如果用户更改了我的软件的主题,则此样式(选择颜色)应重新创建以匹配更改的主题颜色。

<Style x:Key="SimpleListBoxItem" TargetType="ListBoxItem">
 <Setter Property="FocusVisualStyle" Value="{x:Null}" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="ListBoxItem">
        <Border Name="Border" Padding="2" SnapsToDevicePixels="true">
          <ContentPresenter />
        </Border>
        <ControlTemplate.Triggers>
          <Trigger Property="IsSelected" Value="true">
            <Setter TargetName="Border" Property="Background" Value="{StaticResource AuthorGradient}"/>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

1 个答案:

答案 0 :(得分:4)

我认为您没有此代码版本的代码,您只需将现有模板应用于您的列表框,如下所示。

如果您的目标是模板。

(NameOfListBox.SelectedItem as ListBoxItem).ContentTemplate = this.Resources["NameOfTemplate"] as DataTempate;
(NameOfListBox.SelectedItem as ListBoxItem).UpdateLayout();

如果你的目标是一种风格。

 (NameOfListBox.SelectedItem as ListBoxItem).Style= this.Resources["NameOfStyle"] as DataTempate;
 (NameOfListBox.SelectedItem as ListBoxItem).UpdateLayout();

例如

(lstMetaDataCards.SelectedItem as ListBoxItem).ContentTemplate = this.Resources["MetaDataCardAtEditState"] as DataTemplate;
(lstMetaDataCards.SelectedItem as ListBoxItem).UpdateLayout();