使用带有MenuItems的VisualStates来更改前景颜色

时间:2013-06-03 20:36:18

标签: c# wpf wpf-controls menuitem visualstates

我看起来似乎是一个相对简单的问题,但在同样的说明中,我仍然是WPF的新手,所以请我gental。我的问题很简单,我在上传菜单中的MenuItems上有一个VisualStateManager,我想要处理前景色。这是我的尝试

           **WPF PORTION**

           <VisualStateManager.VisualStateGroups>
              <VisualStateGroup Name="ExcelVisualState">
                <VisualState Name="XLSXNormal">
                  <Storyboard>
                    <ColorAnimation Storyboard.TargetProperty="Foreground" To="#FF003471" Duration="00:00:00.0010000" />
                  </Storyboard>
                </VisualState>
                <VisualState Name="XLSXDisabled">
                  <Storyboard>
                    <ColorAnimation Storyboard.TargetProperty="Foreground" To="#A99B9A71" Duration="00:00:00.0010000" />
                  </Storyboard>
                </VisualState>
              </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>

            **C# Code**
            //Fires when the isEnabled method changes for my menu item
            private void MenuItem_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e)
            {
               //If MS Excel is installed set the visual state to XLSXNormal
               if (miExportXLSX.IsEnabled)
                  VisualStateManager.GoToState(miExportXLSX, "XLSXNormal", true);
               //MS Excel is not installed so set the state to XLSXDisabled
               else
                  VisualStateManager.GoToState(miExportXLSX, "XLSXDisabled", true);
            }

我是在正确的轨道上,还是我离开了?这是我第一次尝试使用Visual States,我知道这可能对于这个简单的任务来说有点过分,但我必须从某个地方开始,并认为这很容易。

(如果需要澄清,请告诉我们)

2 个答案:

答案 0 :(得分:1)

我注意到你没有设置Storyboard.TargetName

尝试将其设置为适当的控件名称。

编辑:

我想我现在看到了。您的颜色动画的目标属性:不将其设置为“前景”,而是将其更改为“颜色”。如果你这样做,你将不得不将目标控件从MenuItem更改为MenuItem的背景画笔。

或者您可以保留原样,并将ColorAnimation中的目标媒体资源更改为Foreground.SolidColorBrush.Color

这是an example设置ColorAnimation的目标属性。

答案 1 :(得分:1)

尝试

VisualStateManager.GoToElementState

而不是

VisualStateManager.GoToState