使用VisualState将richditbox的宽度设置为Auto (XAML, c#, Windows 8应用程序)

本文关键字:XAML Windows 应用程序 Auto richditbox VisualState 设置 使用 | 更新日期: 2023-09-27 18:04:28

我是一个c# Windows 8应用程序的初学者。我在屏幕中心有一个RichEditBox,其宽度根据窗口大小而变化。我可以通过编辑自己的属性将这个RichEditBox的宽度设置为Auto,但是当窗口的宽度低于某一点时,我想将宽度设置为Auto。我使用VisualState s来定义各种屏幕选项。问题是,当我将值设置为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"/>

但是当我尝试用VisualState将宽度设置为Auto时,它崩溃了。有什么办法可以解决这个问题吗?

使用VisualState将richditbox的宽度设置为Auto (XAML, c#, Windows 8应用程序)

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

考虑到这一点,你可以这样设置你的(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