1

我是使用 C# Windows 8 应用程序的初学者。我在屏幕中央有一个 RichEditBox,其宽度会根据窗口大小而变化。我可以通过编辑它自己的属性来设置这个 RichEditBox 的宽度Auto,但是我想将宽度设置为Auto当窗口的宽度低于某个点时。我正在使用VisualStates 来定义各种屏幕选项。问题是当我将值设置为 时Auto,应用程序在尝试调用新的VisualState.

我的代码如下:

    <VisualStateGroup x:Name="ApplicationViewStates">
        <VisualState x:Name="FlexibleViewState">
            <Storyboard>
                <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Editor" Storyboard.TargetProperty="Width">
                    <DiscreteObjectKeyFrame KeyTime="0" Value="Auto"/>
                </ObjectAnimationUsingKeyFrames>
            </Storyboard>
        </VisualState>
    </VisualStateGroup>

我不知道它为什么这样做。我可以毫无问题地执行以下操作:

    <RichEditBox x:Name="Editor" Width="Auto"/>

但是当我尝试将宽度设置为AutoaVisualState时,它会崩溃。有没有办法解决这个问题或解决这个问题?

4

1 回答 1

1

首先要实现的是宽度 Auto 表示为 NaN 值。有关 FrameworkElement.Width 的文档,请参阅MSDN

考虑到这一点,您可以像这样设置您的(Windows 8.1)样式:

<VisualStateGroup x:Name="ApplicationViewStates">
    <VisualState x:Name="FlexibleViewState">
        <Storyboard>
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Editor" Storyboard.TargetProperty="Width">
                <DiscreteObjectKeyFrame KeyTime="0">
                     <DiscreteObjectKeyFrame.Value>
                         <x:Double>NaN</x:Double>
                     </DiscreteObjectKeyFrame.Value>
                </DiscreteObjectKeyFrame>
            </ObjectAnimationUsingKeyFrames>
        </Storyboard>
    </VisualState>
</VisualStateGroup> 

如果您使用不同风格的 XAML,您可能需要使用 sys:Double 而不是 x:Double

于 2015-05-16T09:46:52.837 回答