2015-07-17 3 views
2

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

Если нет, то то, что я хочу построить, - это UserControl, который позволит мне вводить один-ко-многим из моих UserBontton UserControls и устанавливать текст GroupLabel, как показано ниже. Можно ли это сделать в WPF?

 <User_Controls:ToolbarGroup GroupLabel="Entity"> 
       <User_Controls:ImageButton ButtonText="Entity Setup"/> 
       <User_Controls:ImageButton ButtonText="New Entity"/> 
     </User_Controls:ToolbarGroup> 

PS: Я бы разместил изображение, но этот необычный форум не позволит мне размещать изображение.

+0

Вместо этого вы можете добавить ссылку на свое изображение. –

ответ

0

Если у меня есть вы правильно, я думаю, вы также можете достичь этого, и на мышином enter и оставить событие вы можете сделать кнопку щелкнуть мышью. для установки текста вы можете использовать сетку и метку внутри нее, чтобы установить текст, и кнопки изображения под ним.

<UserControl x:Class="ABC.View.Oats" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid> 
     <Image Source="{Binding Image}" Stretch="Fill"/> 
    </Grid> 
</UserControl> 
0

Я думаю, что вы ищете GroupBox, у него есть свойство заголовка, где вы можете установить метку.

Что-то вроде этого:

<GroupBox Width="300" Height="100"> 
     <GroupBox.Header> 
      <Label>Text</Label> 
     </GroupBox.Header> 
     <StackPanel> 
      <Button Content="Button"/> 
      <Button Content="Button"/> 
      <Button Content="Button"/> 
     </StackPanel> 
    </GroupBox> 
0

Я также рекомендую использовать GroupBox, это, кажется, делает именно то, что вы хотите, чтобы это сделать, и это выглядит аккуратно. Вот несколько примеров того, как их использовать: http://www.dotnetperls.com/groupbox-wpf

С другой стороны, если вы считаете, что групповой пакет недостаточен, вы можете создать элемент управления, который наследуется от группового ящика, и вы можете его расширить и добавить все, что вам нужно , Это будет выглядеть так:

public class customGroupBox: GroupBox{ 
....Add whatever you need here 
} 
0

Спасибо за ответы. Я попробовал GroupBox, и это не тот макет, который нам нужен, потому что мы хотим, чтобы метка находилась под кнопками и центрирована. Я никогда не мог найти способ добавить коллекцию в UserControl. Возможно, я не задал вопрос правильно, назвав его контейнером. Код ниже будет работать, но он не изящный. Я хотел что-то, что бы обернуть макет в UserControl и позволить мне добавлять переменное количество кнопок в каждую группу панели инструментов.

 <StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="0"> 
 
      <Border Background="GhostWhite" BorderBrush="Gainsboro" BorderThickness="1"> 
 
       <StackPanel Orientation="Vertical"> 
 
        <StackPanel Orientation="Horizontal"> 
 
         <User_Controls:ImageButton ButtonText="New 1"/> 
 
         <User_Controls:ImageButton ButtonText="New 2"/> 
 
         <User_Controls:ImageButton ButtonText="New 3"/> 
 
        </StackPanel> 
 
        <Label HorizontalAlignment="Center" Content="Group 1"/> 
 
       </StackPanel> 
 
      </Border> 
 
      <Border Background="GhostWhite" BorderBrush="Gainsboro" BorderThickness="1"> 
 
       <StackPanel Orientation="Vertical"> 
 
        <StackPanel Orientation="Horizontal"> 
 
         <User_Controls:ImageButton ButtonText="New 4"/> 
 
        </StackPanel> 
 
        <Label HorizontalAlignment="Center" Content="Group 2"/> 
 
       </StackPanel> 
 
      </Border> 
 
     </StackPanel>

0

Один из способов сделать это с персонализированным стилем ItemsControl.

Затем вы можете повторно использовать его и просто привязать к разным данным.

Пожалуйста, простите меня, это рука наберется ...

В своих ресурсов ...

<Style x:Key="ToolbarGroupItemsControlStyle" TargetType="ItemsControl"> 
    ... 
    <Setter Property="ItemsPanel"> 
     <Setter.Value> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Horizontal"/> 
      </ItemsPanelTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ItemsControl"> 
       <Grid> 
        ... XAML to form your group with a binding to the 
        ... group name 
        <ItemsPresenter/> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<DataTemplate x:Key="ToolbarGroupItemTemplate"> 
    <Grid> 
     ... XAML and binding for each toolbar group item ... 
    </Grid> 
</DataTemplate> 

В вашем XAML ...

<ItemsControl 
    Style="{DynamicResource ToolbarGroupItemsControlStyle}" 
    ItemsSource="{Binding ToolbarGroupItems}" 
    ItemTemplate="{DynamicResource ToolbarGroupItemTemplate"/> 

Если ваши ресурсы выше находятся на уровне приложения, тогда вы можете поместить элемент ItemsControl выше на любое окно/UserControl, которое вы хотите.

Элементы ItemsSource должны быть коллекцией настраиваемого типа, который вы создаете, который имеет привязки для текста кнопки и т. Д.

Надеюсь, это полезно.

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