2013-11-09 46 views
0

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

这里是我的代码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

你可以使用绑定吗? –

+0

我已经将数据绑定到类变量r1和r2。你说什么样的约束力?你能解释一下吗? – Surjeet

回答

1

每当你需要重复一个UI的相同部分,你可以把那部分(UI元素)int o UserControl ......这正是他们的所为。一旦将UI控件添加到XAML中,则可以添加DependencyProperty,这将使您能够在控件内显示和/或编辑UserControl以外的Bind数据。这里有一个简单的例子:

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}" /> 
+0

我创建了一个带有网格的用户控件。现在,我想用该用户控件作为tabitem,只要我点击一个按钮。如何才能做到这一点 ? – Surjeet

+0

我向你展示了如何在我的例子中使用你的'UserControl' ...只需将该行添加到'TabItem.Content'部分。 – Sheridan

+0

非常感谢。你的建议有帮助 – Surjeet

相关问题