шаблон управления wpf - PullRequest
       23

шаблон управления wpf

2 голосов
/ 17 июля 2009

У меня есть очень простой случай, который, я думаю, выиграл бы от использования шаблонов (но я не уверен, именно поэтому я спрашиваю). Все примеры шаблонов, которые я видел, предполагают либо больше знаний, чем у меня, либо слишком специфичны, чтобы быть полезными для такого новичка, как я, либо содержат много вспомогательных вещей, которые затрудняют определение того, что является частью шаблона.

Вот настройки: У меня есть две метки бок о бок, первая метка заполняется именем поля, а вторая метка заполняется значением поля.

Вот XAML, который у меня сейчас есть в моем приложении (много-много раз):

<StackPanel Style="{StaticResource horizontalStackerStyle}">
    <Label Style="{StaticResource labelStyle}">Field One:</Label>
    <Label Style="{StaticResource valueStyle}" Name="field1" 
        Content="{Binding dataObject.field1}" />
</StackPanel>

Я хотел бы создать шаблон, чтобы я мог написать XAML следующим образом:

<CustomControlOrWhatever 
    FieldName="Field One:" 
    FieldValue="{Binding dataObject.field1}"/>

У меня такое чувство, что я могу сделать это с помощью какого-то шаблона. Одним из преимуществ этого было бы то, что мне не нужно постоянно указывать стили снова и снова. Я прав? Как бы я это сделал?

Заранее спасибо!

UPDATE:

Все еще не нашли ответа на это. Я выбрал возможное решение, используя свойства зависимости, и попытался задать уточняющий вопрос здесь . Ну, первый респондент сказал, что мне на самом деле не нужно загромождать свой код чепухой DP, поэтому я изменил его снова - и он все еще не работает. Может кто-нибудь придумать рабочее решение? Кажется, это должно быть так просто.

Просто чтобы прояснить: это только односторонняя привязка со значениями, обновляемыми каждые несколько секунд.

Ответы [ 3 ]

2 голосов
/ 17 июля 2009

То, что вы запрашиваете, это в основном пользовательский элемент управления.

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SomeNameSpace.SomeControlName">
    <Grid x:Name="LayoutRoot">
     <StackPanel Style="{StaticResource horizontalStackerStyle}">
      <Label Style="{StaticResource labelStyle}" x:Name="FieldNameLbl"></Label>
      <Label Style="{StaticResource valueStyle}" x:Name="ValueLbl">
      </StackPanel>
    </Grid>
</UserControl>

В приведенном ниже коде вам нужно будет предоставить два свойства, которые будут устанавливать значение элементов управления.

public string FieldName
{
    get { return FieldNameLbl.Text; }
    set { FieldNameLbl.Text = value; }
}

public string FieldValue
{
    get { return ValueLbl.Text; }
    set { ValueLbl.Text = value; }
}

И затем, чтобы позвонить, вы можете поместить это в верхнюю часть вашего окна / страницы с остальными вашими объявлениями:

xmlns:Controls="clr-namespace:SomeNameSpace" 

и затем вы можете вставить элемент управления в окно / страницу следующим образом:

<Controls:NameOfYourControl FieldName="Field One:" FieldValue="{Binding dataObject.field1}"/>
1 голос
/ 17 июля 2009

Вы можете создать UserControl с именем FieldControl и определить базовые (автоматические) свойства для FieldName и FieldValue. (Нормальные свойства будут хороши, если вам нужно только один раз связать, что, вероятно, и так).

Код XAML может выглядеть следующим образом:

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             x:Class="foo.bar">
    <StackPanel Style="{StaticResource horizontalStackerStyle}">
        <Label Style="{StaticResource labelStyle}" Content="{Binding Path=FieldName, Mode=OneTime, StringFormat='{0}: '}"/>
        <Label Style="{StaticResource valueStyle}" Content="{Binding Path=FieldValue, Mode=OneTime}" />
    </StackPanel>
</UserControl>

Надеюсь, это поможет.

0 голосов
/ 17 июля 2009

То, что вы хотите сделать, похоже на обсуждение вопроса о размещении изображений на кнопке с простым способом указания пути, например <Button MyImage="foo.jpg" />. Следуйте этой статье , чтобы узнать подробности.

Подведем итог:

  • Одним очевидным способом было бы создание UserControl, содержащего ваши две метки и выставляющего два свойства. Здесь не так много шаблонов.

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

...