Установка StringFormat WPF DatePicker внутри UserControl - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть пользовательский WPF UserControl, который использует внутри него DatePicker. Я устанавливаю формат отображения DatePicker, используя ответ, предоставленный в этой статье SO

<Style TargetType="{x:Type DatePickerTextBox}" BasedOn="{StaticResource {x:Type DatePickerTextBox}}">
    <Setter Property="Control.Template">
        <Setter.Value>
            <ControlTemplate>
                <TextBox x:Name="PART_TextBox"
                    Text="{Binding Path=SelectedDate, StringFormat='dd-MM-yy', RelativeSource={RelativeSource AncestorType={x:Type DatePicker}}}" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Я хотел бы использовать другую строку формата для разных экземпляров элемента управления, поэтомуЯ хотел бы каким-то образом предоставить формат, когда я добавляю UserControl в форму, что-то вроде

<basecontrols:CustomControl 
    LabelWidth="{StaticResource LabelColumnWidth}" 
    Label="Custom Information" 
    DateDisplayFormat="dd-MMMM-yyyy" 
    />

Label и LabelWidth являются свойствами Dependancy пользовательского UserControl.

Является ли этоМожно ли связать StringFormat со свойством элемента управления, когда он находится внутри Binding? Если нет, есть ли способ сделать то, что я хочу сделать?

Надеюсь, что имеет смысл

1 Ответ

1 голос
/ 04 ноября 2019

Возможно ли связать StringFormat со свойством элемента управления, когда оно находится внутри Binding?

Нет. Вы не можете связать StringFormat свойство Binding, потому что это не свойство зависимости.

Что вы можете сделать, это определить свойство DateDisplayFormat зависимости в вашем CustomControl (что, я думаю,вы уже сделали), а затем переопределите метод OnApplyTemplate и программно создайте привязку TextBox.

В качестве альтернативы, вы можете использовать <MultiBinding> в разметке XAML, которая связывается с обоими SelectedDateи DateDisplayFormat и использовать мультиконвертер, который возвращает string.

...