2010-10-10 3 views
3

У меня есть текстовое поле, которое имеет следующий простой XAML (не надо читать - просто это для справки):Вопрос о шаблоне данных или стиле в WPF 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, маржа и т.д.) в стиле, потому что у меня есть много этих текстовых полей, и они» почти точно то же самое. На самом деле, есть намного больше общего, чем просто стиль. Детали привязки к классу MySettings почти одинаковы. Единственное различие заключается в том, какое конкретное свойство имеет текстовое поле. Кроме того, я всегда пользователь TextBox_Error для Validation.Error.

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

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

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

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

Спасибо,

Dave

ответ

4

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

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

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

HTH

+0

Спасибо. Я рассмотрю этот подход. – Dave

Смежные вопросы