Вопрос о шаблоне данных или стиле в WPF xaml - PullRequest
3 голосов
/ 11 октября 2010

У меня есть текстовое поле со следующим простым XAML (не нужно читать его - просто имейте для справки):

<TextBox Name="m_ctrlUserDeviceType" Style="{StaticResource textStyleTextBox}" Text="{Binding Source={x:Static api:MySettings.Instance}, Path=UserDeviceType, ValidatesOnExceptions=true, NotifyOnValidationError=true}" Validation.Error="TextBox_Error" MinHeight="25" Margin="4" VerticalAlignment="Top" MaxLength="23" VerticalContentAlignment="Center" HorizontalAlignment="Left" MinWidth="100"></TextBox>

Для полноты стиль textStyleTextBox выглядит следующим образом (опять же, не обязательно)читать, чтобы ответить на вопрос):

<Style x:Key="textStyleTextBox" TargetType="TextBox">
    <Setter Property="Foreground" Value="#333333" />
        <Setter Property="VerticalAlignment" Value="Top" />
        <Setter Property="MinHeight" Value="2" />
        <Setter Property="MinWidth" Value="100" />
        <Setter Property="Margin" Value="4" />
        <Setter Property="MaxLength" Value="23" />
        <Setter Property="VerticalContentAlignment" Value="Center" />
        <Setter Property="HorizontalAlignment" Value="Left" />
       <!-- <Setter Property="Binding Source" Value="{x:Static api:MySettings.Instance}"/>
        <Setter Property="Binding ValidatesOnExceptions" Value="true" />
        <Setter Property="Binding NotifyOnValidationError" Value="true" /> -->



  <Style.Triggers>
    <Trigger Property="Validation.HasError" Value="true">
      <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self},
                    Path=(Validation.Errors)[0].ErrorContent}" />
    </Trigger>
  </Style.Triggers>
</Style>

У меня есть много вещей (MiHeight, Margin и т. д.) в стиле, потому что у меня много этих текстовых полей, и они почти точно такие же,На самом деле, здесь гораздо больше общего, чем просто стиль.Детали привязки к классу MySettings практически одинаковы.Разница лишь в том, какое конкретное свойство текстовое поле также является обязательным.Кроме того, я всегда использую TextBox_Error для Validation.Error.

Можно ли поместить информацию о привязке в стиль или шаблон данных, чтобы мне не приходилось вводить ее для каждого текстового поля?

Мне нужно было бы иметь возможность назначить отдельное свойство (путь) для каждого текстового поля, и я полагаю, мне все еще нужна возможность не использовать его для какого-то конкретного текстового поля, добавленного в будущем (которое имеетничего общего с привязкой данных к MySettings).

Есть ли способ поместить часть TextBox_Error в style или DataTemplate?Использование свойства Setter, похоже, не работает для меня.

Я продолжаю упоминать шаблон данных, так как думаю, что ответ может быть связан с тем, что основано на чтении Pro Silverlight 2 в C # 2008. Однако яне смог понять это.Я также попытался добавить материал в «Стиль», как вы можете видеть из закомментированного материала в этом разделе.

Спасибо,

Дейв

1 Ответ

4 голосов
/ 11 октября 2010

Я не думаю, что есть способ сделать то, что вы просите.Тем не менее, я думаю, что вы могли бы пойти по-другому.

Я хотел бы взглянуть на создание пользовательского элемента управления, расширяющего TextBox, а затем создать некоторые свойства зависимостей, которые при инициализации элемента управления, установите привязки и проверку ошибок.

Таким образом, вы можете использовать свое собственное текстовое поле во всем приложении и контролировать каждое свойство, и даже стилизовать их одинаково (просто измените целевой тип вашего стиля)

НТН

...