将XAML样式转换为代码隐藏样式

本文关键字:样式 代码 隐藏 转换 XAML | 更新日期: 2023-09-27 18:13:08

我有一个列表框,它的选择颜色是默认的纯蓝色。我在这里读了这篇文章"如何改变WPF列表框被选中项的颜色?"我想创建的风格给它背后的代码。这样我就可以把这个样式分配给我的Listbox ItemContainerStyle属性。

Style s = ......

MyListBox。

我想在代码后面做这个,因为如果用户改变了我的软件的主题,那么这个样式(选择颜色)应该重新创建自己,以匹配改变的主题颜色。

<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>

将XAML样式转换为代码隐藏样式

我想你没有代码背后的版本,你只需要应用你现有的模板到你的列表框,像下面的

如果目标是模板。

(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();