我試圖將TabItem
中的TextBox
的文本綁定到該TabItem
的頭,這樣頭和文本框都有相同的內容(例如,當頭是“test”時,文本框也應該顯示“test”)。
TextBox
是DataTemplate
的一部分,我將其用作ContentTemplate
的StaticResource
。DataTemplate
工作正常,所有內容都按預期顯示在選項卡中。只有TextBox
是空的。我嘗試了很多方法來定義RelativeSource
,但到目前為止沒有一種方法有效。
<DataTemplate x:Key="myTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Source="..."/>
<Border BorderBrush="Black" BorderThickness="0 0 0.2 0"/>
<StackPanel Grid.Column="1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Content="Name: "/>
<TextBox Grid.Column="1" Text="{Binding DataContext.Header,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabItem}}}"/>
<Button Grid.Column="3" Content="Speichern"/>
</Grid>
</StackPanel>
</Grid>
</DataTemplate>
編輯:然后我使用這樣的模板:
<TabControl>
<TabItem ContentTemplate="{StaticResource myTemplate}" Header="Test"/>
<TabItem Header="Tab 2"/>
<TabItem Header="Tab 3"/>
</TabControl>
通常為某些特定的數據類型創建數據模板。在ContentControl(包括TabItem)中,數據進入Content屬性(通常來自DataContext屬性),ContentTemplate中的模板指定其呈現。
下面是一個具有一個字符串屬性的數據類型的示例。該示例使用BaseInpc類。
典型的WPF是MVVM模式的實現。在本例中,您將收到TabControl源代碼中的元素集合
<TabControl ItemsSource =" {Binding CollectionProperty} "...>
。在本例中,TabControl將為DataContext和Content中它將傳遞相應集合項的每個項自動創建一個TabItem。元素模板、標頭等中的綁定必須相對于此元素指定。您沒有MVVM,所以我將展示一個簡單的示例,其中對初始代碼的更改最小。
MVVM實現示例: