我在桌面应用程序中使用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>
答案 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}" />