UserControl控件和值在Locals窗口中可用,但在代码中不可访问

时间:2015-03-19 10:00:44

标签: c# wpf

我有一个愚蠢的问题 - 我正在处理一个标签控件的事件(Selected Tab Changed),我想将窗口标题设置为标签标题。 选项卡标题是一个用户控件,包含三个文本块。

代码:

TabItem item = tabCtrl.SelectedItem as TabItem;
if (item.Header is TabHeader)
{
   // the topTextBlock is not visible
   // string topText = (item.Header as TabHeader).topTextBlock.Text;
}

问题是,当我将鼠标悬停在item.Header上或转到Locals窗口时,工具提示会显示所需的文本块,我可以看到它们的文本。那么如何从代码中访问它们呢?

(item.Header as TabHeader)可以访问各种属性和方法(width,height,cliptobounds,contextMenu等)。

干杯!

1 个答案:

答案 0 :(得分:1)

默认情况下,topTextBlock(在XAML中从x:Name="topTextBlock"生成)是私有的。您可以将其更改为公开生成,但您不应该这样做。您还应该避免通过FindName查找字段。

披露公共财产

public partial class TabHeader : UserControl
{
    public string TopText
    {
        get { return topTextBlock.Text; }
    }

    ...
}

并在后面的代码中使用它

var topText = ((TabHeader)item.Header).TopText;

或绑定

Title="{Binding SelectedItem.Header.TopText, ElementName=tabCtrl}"