Использование VisualState для установки ширины RichEditBox на Авто (XAML, C #, приложение для Windows 8)

1

Я начинаю работать с С# 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 она сработает. Есть ли способ исправить это или решить эту проблему?

Теги:
xaml
width
windows-store-apps
visualstates

1 ответ

1

Первое, что нужно понять, состоит в том, что ширина 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню