在wpf中突出显示不同颜色的选定条

时间:2014-09-19 06:27:36

标签: wpf bar-chart wpftoolkit

我有一个WPF应用程序,我有一个条形图。

默认情况下,条形图的颜色为钢蓝色。

我想要一种功能,当用户选择一个条形时,它应该以不同的颜色突出显示,即红色以表示该产品是指的。请指导我如何实现这一目标。

目前我使用了以下columndatapoint样式。

    <Style
                x:Key="MyColumnDataPointStyle"
                TargetType="charting:ColumnDataPoint">
        <Setter Property="Background" Value="SteelBlue"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="charting:ColumnDataPoint">
                    <Border
                                BorderBrush="{TemplateBinding BorderBrush}"
                                BorderThickness="{TemplateBinding BorderThickness}"
                                Opacity="1"
                                x:Name="Root">
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualStateGroup.Transitions>
                                    <VisualTransition GeneratedDuration="0:0:0.1"/>
                                </VisualStateGroup.Transitions>
                                <VisualState x:Name="Normal"/>
                                <VisualState x:Name="MouseOver">
                                    <Storyboard>
                                        <DoubleAnimation
                                                    Storyboard.TargetName="MouseOverHighlight"
                                                    Storyboard.TargetProperty="Opacity"
                                                    To="0.6"
                                                    Duration="0"/>
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                            <VisualStateGroup x:Name="SelectionStates">
                                <VisualStateGroup.Transitions>
                                    <VisualTransition GeneratedDuration="0:0:0.1"/>
                                </VisualStateGroup.Transitions>
                                <VisualState x:Name="Unselected"/>
                                <VisualState x:Name="Selected">
                                    <Storyboard>
                                        <DoubleAnimation
                                                    Storyboard.TargetName="SelectionHighlight"
                                                    Storyboard.TargetProperty="Opacity"
                                                    To="0.6"
                                                    Duration="0"/>
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                            <VisualStateGroup x:Name="RevealStates">
                                <VisualStateGroup.Transitions>
                                    <VisualTransition GeneratedDuration="0:0:0.5"/>
                                </VisualStateGroup.Transitions>
                                <VisualState x:Name="Shown">
                                    <Storyboard>
                                        <DoubleAnimation
                                                    Storyboard.TargetName="Root"
                                                    Storyboard.TargetProperty="Opacity"
                                                    To="1"
                                                    Duration="0"/>
                                    </Storyboard>
                                </VisualState>
                                <VisualState x:Name="Hidden">
                                    <Storyboard>
                                        <DoubleAnimation
                                                    Storyboard.TargetName="Root"
                                                    Storyboard.TargetProperty="Opacity"
                                                    To="0"
                                                    Duration="0"/>
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                        <Grid
                                    Background="{TemplateBinding Background}">
                            <Rectangle>
                                <Rectangle.Fill>
                                    <LinearGradientBrush>
                                        <GradientStop
                                                    Color="#77ffffff"
                                                    Offset="0"/>
                                        <GradientStop
                                                    Color="#00ffffff"
                                                    Offset="1"/>
                                    </LinearGradientBrush>
                                </Rectangle.Fill>
                            </Rectangle>
                            <Border
                                        BorderBrush="#ccffffff"
                                        BorderThickness="1">
                                <Border
                                            BorderBrush="#77ffffff"
                                            BorderThickness="1"/>
                            </Border>
                            <Rectangle x:Name="SelectionHighlight" Fill="Red" Opacity="0"/>
                            <Rectangle x:Name="MouseOverHighlight" Fill="White" Opacity="0"/>
                        </Grid>
                        <ToolTipService.ToolTip>
                            <StackPanel>
                                <ContentControl
                                            Content="{TemplateBinding FormattedIndependentValue}"
                                            FontWeight="Bold"/>
                                <ContentControl
                                            Content="{TemplateBinding FormattedDependentValue}"/>
                            </StackPanel>
                        </ToolTipService.ToolTip>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

1 个答案:

答案 0 :(得分:0)

要在MVVM模式中执行此操作,我将为ColumnDataPoint创建一个ViewModel类。 此ViewModel包含bool属性,例如叫做IsActive。 然后,您可以将条形图的DataContext绑定到该ViewModel,并且在您的样式中,您可以设置绑定到该属性的DataTrigger。 要更改该属性,您可以在ViewModel中创建一个命令,该命令将在单击栏

时执行

这是一个小例子:

     <Rectangle Fill="SteelBlue"
                DataContext="{Binding YourViewModel}">
        <Rectangle.Style>
            <Style TargetType="Rectangle">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsActive}" Value="true">
                        <Setter Property="Stroke" Value="Chartreuse"/>
                        <Setter Property="StrokeThickness" Value="5"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Rectangle.Style>
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseLeftButtonUp">
                <command:EventToCommand Command="{Binding ClickingBarCommand}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
     </Rectangle>

要使用“i”和“command”命名空间,您必须添加

  

的xmlns:ⅰ= “CLR-名称空间:System.Windows.Interactivity;装配= System.Windows.Interactivity”                的xmlns:命令= “http://www.galasoft.ch/mvvmlight”

希望这对你有帮助

欢呼声