Я начинаю работать с С# Windows 8. У меня есть RichEditBox в центре экрана, ширина которого изменяется в зависимости от размера окна. Я могу установить ширину этого RichEditBox в Auto
, отредактировав его собственные свойства, но я хочу установить ширину в Auto
когда ширина окна опускается ниже определенной точки. Я использую VisualState
для определения различных параметров экрана. Проблема в том, что когда я устанавливаю значение в 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"/>
Но когда я пытаюсь установить ширину в Auto
с помощью VisualState
она сработает. Есть ли способ исправить это или решить эту проблему?
Первое, что нужно понять, состоит в том, что ширина Auto представляется как значение NaN. см. MSDN для документации по FrameworkElement.Width
Имея это в виду, вы можете настроить стиль (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