繁体   English   中英

如何从 TabControl 获取所选 TabItem 的文本块名称

[英]How to get textblock name for the selected TabItem from TabControl

我为 TabControl 动态创建了 5 种类型的 TabItem。 例如:

 <Style x:Key="StyleCrcs" TargetType="{x:Type TabItem}">
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="AllowDrop" Value="True"/>
        <EventSetter Event="PreviewMouseMove" Handler="TabItem_PreviewMouseMove"/>
        <EventSetter Event="Drop" Handler="TabItem_Drop"/>
        <Setter Property="ContentTemplate" >
            <Setter.Value>
                <DataTemplate>
                    <Grid>
                        <TextBlock TextWrapping="Wrap" Text="Adres(hex)" FontSize="15" Margin="10,10,396,444"/>
                        <ComboBox x:Name="AddressCrcs" HorizontalAlignment="Left" Margin="134,11,0,0" VerticalAlignment="Top" Width="120">
                            <ComboBoxItem>60</ComboBoxItem>
                            <ComboBoxItem>61</ComboBoxItem>
                            <ComboBoxItem>62</ComboBoxItem>
                            <ComboBoxItem>63</ComboBoxItem>
                            <ComboBoxItem>64</ComboBoxItem>
                            <ComboBoxItem>65</ComboBoxItem>
                            <ComboBoxItem>66</ComboBoxItem>
                            <ComboBoxItem>67</ComboBoxItem>
                        </ComboBox>

                        <TextBlock x:Name="Tranz1" TextWrapping="Wrap" Text="Tranzystor 1:" FontSize="15" Margin="10,126,396,337"/>
                        <TextBlock x:Name="Tranz2" TextWrapping="Wrap" Text="Tranzystor 2:" FontSize="15" Margin="10,156,396,307"/>
                    </Grid>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>

他们每个人都有特定的结构。 所有这些类型都从 ICard 继承。

interface ICards
{
    string Name { get; set; }
    string Address { get; set; }
}
class CardCrcs : ICards
{
    public string Name { get; set; }
    public string Address { get; set; }
    public string Tranzystor1 { get; set; }
    public string Tranzystor2 { get; set; }
}

当我创建 TabItem 时,我将对象添加到列表中。

每个 TabItem 都有文本块,我想在更改 TabItem 时为此文本块设置文本。

我怎样才能做到这一点?

<TabControl x:Name="TabCards" Grid.Column="1" SelectionChanged="TabCards_SelectionChanged">

var list = new List<ICards>()
var element = (CardCrcs)list[0];
TabCards.SelectedItem.Tranz1.Text = element.Tranzystor1;

TabCards.SelectedItem.Tranz1.Text不起作用。 如何替换这个来做到这一点?

编辑:

当我这样做时,我可以使用标题,但不能使用文本块名称。

var item = (TabItem)TabCards.SelectedItem;   

我建议将您的 TabControl 绑定到您还为其提供 DataTemplates(将映射为选项卡项的 ContentTemplate)的视图模型实例列表。

请参阅此问题及其答案以供参考。

您似乎已经定义了不同的视图模型(例如 CardCrcs 类),因此您可以定义 DataTemplate 对象,并为每个对象设置 TargetType,描述每个选项卡项的外观。

在这些模板中的每一个中,您可以使用绑定到由相应类定义的属性,例如<TextBlock Text="{Binding Address}"/>

最后,将 TabControl 的 ItemsSource 设置为您可以在 DataContext 中准备的视图模型实例列表,如果您愿意的话: ItemsSource={Binding}

这种方法会限制很多背后的代码,而且也更容易理解,IMO。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM