Могу ли я создать пользовательский элемент управления WPF с элементом-заполнителем? - PullRequest
0 голосов
/ 27 октября 2010

У нас есть много элементов управления, которые состоят из: контейнера с закругленными границами и пары кнопок, которые вызывают команды сохранения и отмены на модели представления, примерно так:

     <Border Background="White" CornerRadius="10" BorderBrush="Black" BorderThickness="1" Opacity="1" Padding="5,5,5,5" VerticalAlignment="Center" HorizontalAlignment="Center">
        <StackPanel>
           <!--Some Control Stuff Here...-->

          <controls:SaveCancelButtons/>
        </StackPanel>
    </Border>

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

Какой лучший способ добиться этого?

РЕДАКТИРОВАТЬ:

ОК. Теперь у меня есть такой шаблон:

<ControlTemplate x:Key="RoundedBordersTemplate">
    <Border Background="White" CornerRadius="10" BorderBrush="Black" BorderThickness="1" Opacity="1" Padding="5,5,5,5" VerticalAlignment="Center" HorizontalAlignment="Center">
        <StackPanel>
            <ContentPresenter/>

            <controls:SaveCancelButtons/>
        </StackPanel>
    </Border>
</ControlTemplate>

И управление реализовано так:

<ContentControl Template="{StaticResource RoundedBordersTemplate}">
            <StackPanel>
                <StackPanel Orientation="Horizontal">
                    <Label Content="Description: " Width="72"/>
                    <TextBox Text="{Binding Path=Description}"
                        Width="205" />
                </StackPanel>
                <StackPanel Orientation="Horizontal">
                    <Label Content="Type:" Width="72" />
                    <ComboBox ItemsSource="{Binding Path=TypeList}" 
                          DisplayMemberPath="Description" 
                          SelectedValuePath="ID"
                          Width="205" />
                </StackPanel>                
            </StackPanel>            
        </ContentControl>

Но я вижу только кнопки Сохранить / Отменить.

Ответы [ 2 ]

3 голосов
/ 27 октября 2010

Я бы предложил использовать ControlTemplate для типа ContentControl:

<ControlTemplate x:Key="RoundedBordersTemplate" TargetType="ContentControl">
        <Border Background="White" CornerRadius="10" BorderBrush="Black" BorderThickness="1" Opacity="1" Padding="5,5,5,5" VerticalAlignment="Center" HorizontalAlignment="Center">
            <StackPanel>
                <ContentPresenter />
                <controls:SaveCancelButtons/>
            </StackPanel>
        </Border>
    </ControlTemplate>

Затем используйте его, как показано ниже:

<ContentControl Template="{StaticResource RoundedBordersTemplate}">
        <StackPanel>
            <Button>Hello</Button>
            <Button>World</Button>
        </StackPanel>
    </ContentControl>

Чтобы получить:

Example

Обновление: это имеет то преимущество, что не требует от вас подкласса ContentControl для изменения только для просмотра

1 голос
/ 27 октября 2010

Ваш элемент управления должен наследоваться от ContentControl (элемент управления, который содержит CONTENT - т.е. другие элементы управления).Как и все надлежащие элементы управления WPF, этот элемент управления ПОЛНОСТЬЮ НЕВИДИМ - и другие элементы (внешний вид кнопок) добавляются с помощью механизма шаблонов / стиля.

Ваш подкласс ContentControl отвечает за фактическое предоставление логики для кнопок.

...