WPF Tabcontrol所有选项卡的相同类型的模板

时间:2013-11-09 15:59:20

标签: c# wpf xaml listbox tabcontrol

我在桌面应用程序中使用WPF。 在我的XAML代码中,我创建了一个带有列表框的选项卡项。 现在,在我的xaml.cs文件中,在按钮上单击iam添加1个选项卡。 我想要做的是,在按钮单击时,新创建的选项卡应该包含包含其他数据的列表框。 那么,我如何为所有创建的选项卡维护一个类似的模板? 我知道有办法为所有的tabitems创建一个类似的样式模板。但我不想保持相同的样式,但保持相同的控件,我将动态地给予数据源。

这是我的代码xaml代码:                 

                                                                                                                                    

                        <DataTemplate x:Key="ValueStyle" >
                            <TextBlock ToolTip="{Binding Path=Value}" VerticalAlignment="Center" Margin="2" Padding="2" Text="{Binding Path=Value}" />
                        </DataTemplate>

                        <Style x:Key="ExpandCollapseToggleStyle" TargetType="{x:Type ToggleButton}">
                        <Setter Property="Focusable" Value="False"/>
                        <Setter Property="Width" Value="16"/>
                        <Setter Property="Height" Value="16"/>
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type ToggleButton}">
                                    <Border Width="16" Height="16" Background="Transparent" Padding="5,5,5,5">
                                        <Path x:Name="ExpandPath" Fill="Transparent" Stroke="#FF989898" Data="M0,0 L0,6 L6,0 z">
                                            <Path.RenderTransform>
                                                <RotateTransform Angle="135" CenterX="3" CenterY="3"/>
                                            </Path.RenderTransform>
                                        </Path>
                                    </Border>
                                    <ControlTemplate.Triggers>
                                        <Trigger Property="IsMouseOver" Value="True">
                                            <Setter TargetName="ExpandPath" Property="Stroke" Value="#FF1BBBFA"/>
                                            <Setter TargetName="ExpandPath" Property="Fill" Value="Transparent"/>
                                        </Trigger>

                                        <Trigger Property="IsChecked" Value="True">
                                            <Setter TargetName="ExpandPath" Property="RenderTransform">
                                                <Setter.Value>
                                                    <RotateTransform Angle="180" CenterX="3" CenterY="3"/>
                                                </Setter.Value>
                                            </Setter>
                                            <Setter TargetName="ExpandPath" Property="Fill" Value="#FF595959"/>
                                            <Setter TargetName="ExpandPath" Property="Stroke" Value="#FF262626"/>
                                        </Trigger>
                                    </ControlTemplate.Triggers>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </ListBox.Resources>
                <ListBox.ItemTemplate>

                    <DataTemplate>

                      <StackPanel Orientation="Horizontal" MouseLeftButtonDown="ListItemClicked">
                         <Border Width="{Binding Path=Level, Converter={StaticResource ConvertLevelToIndent}}" />
                         <ToggleButton x:Name="tb" ClickMode="Press" IsChecked="{Binding Path=IsExpanded}" Style="{StaticResource ExpandCollapseToggleStyle}"/>
                                <TextBlock FontSize="14" Text="{Binding Path=r1}" Width="100" />

                                <TextBlock FontSize="14" Text="{Binding Path=r2}" Width="100" />


                        </StackPanel>
                        <DataTemplate.Triggers>
                            <DataTrigger Binding="{Binding Path=SubKeyCount}" Value="0">
                                <Setter Property="Visibility" TargetName="tb" Value="Hidden"/>
                            </DataTrigger>
                        </DataTemplate.Triggers>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

            

1 个答案:

答案 0 :(得分:1)

每当您需要重复UI的相同部分时,您可以将该部分(UI元素)放入UserControl ......这正是它们的用途。将UI控件添加到XAML后,您可以添加DependencyProperty,以便在控件内显示和/或编辑Bind以外的UserControl数据。这是一个简单的例子:

UserControl代码背后:

public static DependencyProperty YourCollectionProperty = DependencyProperty.Register(
    "YourCollection", typeof(ObservableCollection<string>), typeof(YourUserControl));

public ObservableCollection<string> YourCollection
{
    get { return (ObservableCollection<string>)GetValue(YourCollectionProperty); }
    set { SetValue(YourCollectionProperty, value); }
}

UserControl XAML中:

<ListBox ItemsSource="{Binding YourCollection, RelativeSource={RelativeSource 
    AncestorType={x:Type YourUserControl}}}" />

然后使用您的UserControl

<YourXamlNamespacePrefix:YourUserControl YourCollection="{Binding SomeCollection}" />

在另一个地方:

<YourXamlNamespacePrefix:YourUserControl YourCollection="{Binding OtherCollection}" />