【问题标题】:Binding a ComboBox selection to the background color of a border.将 ComboBox 选择绑定到边框的背景颜色。
【发布时间】:2014-05-30 15:23:32
【问题描述】:

请原谅我的无知。我是 vb.net 和 WPF 的新手。我有一个组合框,其中包含这样的颜色列表。顺便说一句,这是在 WPF 中。

Public Sub New()
    InitializeComponent()
    cmbColors.ItemsSource = GetType(Colors).GetProperties()
End Sub

在 XAML 中,组合框的创建方式如下:

<ComboBox Name="cmbColors" HorizontalAlignment="Left" Margin="29,35,0,0" 
          Grid.Row="1" VerticalAlignment="Top" Width="120">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Rectangle Fill="{Binding  Name}" Width="16" Height="16" 
                           Margin="0,2,5,2"/>
                <TextBlock x:Name="cmbColorsText" Text="{Binding Name}"/>
            </StackPanel>
        </DataTemplate>
   </ComboBox.ItemTemplate>
</ComboBox>

我要做的是当程序运行时以灰色的起始背景颜色开始,当从组合框中选择新的背景颜色时,背景将更新。 这是我尝试绑定到选择的元素的 XAML。

<Border BorderBrush="{x:Null}" Grid.Column="1" Grid.Row="1" Background="{Binding Text, ElementName=cmbColors}">
    <TextBlock Text="PRACTICE" Style="{StaticResource linkButtons}"/>

我已经浏览了属性窗口中的每个(字符串)类型的边框>背景>创建绑定>元素>组合框,出于某种原因(我无法确定)我要么错过了合适的,要么正在寻找在这个错误的方式。

提前谢谢你!!!

【问题讨论】:

  • 我忘了提到组合框按预期工作。我遇到的唯一问题是让边框背景根据选择改变颜色。

标签: wpf xaml binding combobox element


【解决方案1】:

您将Background 绑定到一个字符串,但背景需要一个ColorBrush。因此,如果您的组合 ItemsSource 已经包含属于 ColorBrush 的项目,那么您可以绑定到 SelectedItem 而不是 Text

或者你可以在你的后台绑定中使用一个转换器,它接受字符串并返回一个SolidColorBrush,比如说。

【讨论】:

  • 谢谢。我将绑定更改为 Background="{Binding SelectedItem, ElementName=cmbColors},但它仍然无法正常工作。我不太喜欢添加转换器,我认为这会在我目前的技能水平上造成更多问题。
  • 正如我所说,绑定到 SelectedItem 仅当您的 Combo 中的项目类型是正确的类型(例如 SolidColorBrush)时才有效。但是,如果您的组合中只有颜色(即不是画笔),那么它将无法正常工作。转换器很棒,对绑定非常有用。找到一个很好的简单教程,涵盖它们,你不会回头!
【解决方案2】:

将绑定更改为

<Border BorderBrush="{x:Null}" Grid.Column="1" Grid.Row="1" Background="{Binding SelectedItem.Name, ElementName=cmbColors}">
            <TextBlock  Text="PRACTICE" Style="{StaticResource linkButtons}"/>

ComboBox 的 Text 属性返回 PropertyInfo 对象的 ToString() 方法的结果,因此例如,如果您选择 Black,它将是“System.Windows.Media.Color Black”,而不是解析为有效颜色。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-07
    • 2011-03-17
    • 2018-10-28
    • 2019-10-10
    • 1970-01-01
    • 2020-05-22
    • 2015-10-23
    • 2011-05-07
    相关资源
    最近更新 更多