【问题标题】:Convert XAML style to code behind style?将 XAML 样式转换为代码隐藏样式?
【发布时间】:2011-12-19 23:57:30
【问题描述】:

我有一个列表框,它的选择颜色是默认的纯蓝色。我阅读了这篇文章“如何更改 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>

【问题讨论】:

  • 您尝试了哪些方法,遇到了哪些问题?请编辑问题以添加此信息,包括您拥有的任何代码示例(即使它们已损坏)。
  • @MerlynMorgan-Graham:我已经编辑了我的问题,请立即查看。
  • 这是一个重复的问题:stackoverflow.com/questions/1729368/… - 从该示例开始,让 Intellisense 帮助您完成其余的工作。
  • @MerlynMorgan-Graham 我已经调查过了

标签: c# wpf xaml


【解决方案1】:

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

如果你的目标是一个模板。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2010-11-12
    • 2016-11-14
    • 2015-01-03
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多