使用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
时,它崩溃了。有什么办法可以解决这个问题吗?
首先要实现的是,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