首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用StackPanel ComboBox SelectionChanged事件更改SelectionChanged颜色?

如何使用StackPanel ComboBox SelectionChanged事件更改SelectionChanged颜色?
EN

Stack Overflow用户
提问于 2018-06-15 04:40:21
回答 2查看 140关注 0票数 2

遵循xaml代码是可以的。

代码语言:javascript
复制
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <ObjectDataProvider ObjectInstance="{x:Type Colors}" MethodName="GetProperties" x:Key="colorPropertiesOdp" />
</Window.Resources>
<Grid>
    <StackPanel Name="StackPanel1" Width="200" Height="30" Background="Red" VerticalAlignment="Top"/>
    <ComboBox Name="ComboBox1" Width="200" Height="30" ItemsSource="{Binding Source={StaticResource colorPropertiesOdp}}" SelectedValuePath="Name">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" Height="18" Margin="0,0,0,2">
                    <Border x:Name="Border1" BorderThickness="1" CornerRadius="2" BorderBrush="Black" Width="50" VerticalAlignment="Stretch" Background="{Binding Name}"/>
                    <TextBlock Text="{Binding Name}" Margin="8,0,0,0"/>
                </StackPanel>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>
</Grid>
</Window>

遵循vb.net代码是不安全的,需要修复。

代码语言:javascript
复制
Private Sub ComboBox1_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles ComboBox1.SelectionChanged
    StackPanel1.Background = Border1.Background
End Sub

遵循C#代码是不安全的,需要修复。

代码语言:javascript
复制
private void ComboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) {
    StackPanel1.Background = Border1.Background;
}

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-15 09:46:57

您可以像这样实现事件处理程序,而无需更改XAML:

代码语言:javascript
复制
private void ComboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ComboBox cmb = sender as ComboBox;
    PropertyInfo pi = cmb.SelectedItem as PropertyInfo;
    if (pi != null)
    {
        Brush brush = (Brush)new BrushConverter().ConvertFromString(pi.Name);
        brush.Freeze();
        StackPanel1.Background = brush;
    }
}

ComboBox绑定到IEnumerable<PropertyInfo>,因此您将SelectedItem转换到当前选定的PropertyInfo对象,然后使用属性名称(“红色”、“蓝色”等)和BrushConverter类创建Brush

票数 0
EN

Stack Overflow用户

发布于 2018-06-15 05:41:46

你可以这样用。

Colors更改为Brushes

代码语言:javascript
复制
<Window.Resources>
    <ObjectDataProvider ObjectInstance="{x:Type Brushes}" MethodName="GetProperties" x:Key="colorPropertiesOdp" />
</Window.Resources>

添加此事件处理程序:

代码语言:javascript
复制
    <ComboBox Name="ComboBox1" Width="200" Height="30" SelectionChanged="ComboBox1_OnSelectionChanged" ItemsSource="{Binding Source={StaticResource colorPropertiesOdp}}" SelectedValuePath="Name">

更改事件:

代码语言:javascript
复制
    private readonly BrushConverter _converter = new BrushConverter();

    private void ComboBox1_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var brush = ((PropertyInfo)this.ComboBox1.SelectedItem).Name;

        this.StackPanel1.Background = (Brush)_converter.ConvertFromString(brush);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50869209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档