Silverlight: изменение свойства статического ресурса во время выполнения - PullRequest
2 голосов
/ 31 августа 2009

изменение ресурса static во время runtine звучит нереально.

У меня есть TextBox, который отображает простое число. Затем я определил стиль, который меняет шаблон TextBox на круглый TextBox:

<Style x:Key="RoundNumberDisplay" TargetType="TextBox">
        <Setter Property="Width" Value="22"/>
        <Setter Property="Height" Value="22"/>

        <Setter Property="Template">
            <Setter.Value>

                    <ControlTemplate>
                        <Border x:Name="brd1" Width="20" Height="20" CornerRadius="15">
                            <TextBlock x:Name="txt1" Foreground="#222" TextAlignment="center" Text="1" FontSize="14" FontWeight="ExtraBold" VerticalAlignment="center" />
                            <Border.Background>
                                <RadialGradientBrush GradientOrigin=".3, .3">
                                    <GradientStop Color="{StaticResource ColorBackground1}" Offset=".15"/>
                                    <GradientStop Color="{StaticResource ColorForeground1}" Offset="1"/>
                                </RadialGradientBrush>
                            </Border.Background>
                        </Border>
                    </ControlTemplate>

            </Setter.Value>
        </Setter>

    </Style>

Как видите, отображаемый текст «зашит» в текстовом блоке «txt1». Очевидно, я не могу изменить номер во время выполнения.

Мой вопрос сейчас таков: как лучше всего изменить отображаемое число? Создание стиля для каждого номера выглядит для меня немного неэффективно.

Спасибо заранее, Frank

Ответы [ 2 ]

2 голосов
/ 01 сентября 2009

TemplateBinding, чтобы можно было установить значение свойства txt1-Text-Property из целевого TextBox. Важно: Тип цели для ControlTemplate должен быть установлен!

    <Style ...

                    <ControlTemplate **TargetType="TextBox"**>
                            ...

                            <TextBlock x:Name="txt1" Foreground="#222" TextAlignment="center" **Text="{TemplateBinding Text}"** FontSize="14" FontWeight="ExtraBold" VerticalAlignment="center" />
                    </ControlTemplate>
    </Style>
0 голосов
/ 31 августа 2009

Стиль - это только внешний вид элемента управления, поэтому на практике вам придется использовать этот стиль несколько раз. Пурист может сказать, что вы не должны включать такие данные, как числа (которые должны что-то значить в контексте вашего приложения) в стиле. Таким образом, вы можете изменить отображаемое число при использовании стиля:

<TextBox Style={StaticResource RoundNumberDisplay} x:Name="TextBoxOne" Text="1"/>

Даже в этом случае вы можете предпочесть привязать Text к вашей ViewModel (или к тому, что вы используете для данных) и извлечь номер оттуда. Либо один из них хорошо IMO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...