【问题标题】:WP programmatically reference TextBlock in C#WP 以编程方式在 C# 中引用 TextBlock
【发布时间】:2013-10-07 09:34:05
【问题描述】:

我正在尝试禁用 TextBlock 的可见性。我可以在以下示例中引用 TextBlock:

XAML 文件

<phone:PivotItem Header="Pivot 1">
   <TextBlock Text="hello world" x:Name="dummytext" />
</phone:PivotItem>

CS 文件

dummytext.Visibility = Visibility.Collapsed;

但是当我有以下代码时,我无法引用它:

XAML 文件

<phone:PivotItem Header="{Binding Dummy.Title}">
  <Grid Margin="0,0,-12,0">
    <ListBox x:Name="Box1">
      <phone:LongListSelector ItemsSource="{Binding Dummy.Items}">
        <phone:LongListSelector.ItemTemplate>
          <DataTemplate>
            <StackPanel>

              <Grid>
                //REFERENCE THIS TEXTBLOCK
                <TextBlock Text="hello world" x:Name="dummytext" />
              </Grid>

              <Grid>
                <TextBlock Text="byee world" x:Name="dummytext2" />
                <TextBlock Text="bye2 world" x:Name="dummytext3" />
              </Grid>

            </StackPanel>
          </DataTemplate>
        </phone:LongListSelector.ItemTemplate>
      </phone:LongListSelector>
    </ListBox>
  </Grid>
</phone:PivotItem>

我是 Windows Phone 开发的新手,还在学习。你能指出我哪里出错了吗?

【问题讨论】:

  • 其实你是绑定在 LongListSelector 中的文本块所以你不能直接使用它...
  • 我认为(因为您使用的是 longlist 选择器)您应该指向要隐藏的 Longlistselection 项目的索引。 LonglistSelector.ItemIdex 之类的东西(类似的东西)。但有一件事是肯定的,你现在不能访问它,因为它是 Longlist Selector 的子项。你不能直接访问它
  • 首先你必须找到它,然后才能使用 textblock 属性
  • 我不知道。我会试试你的解决方案 Bart。
  • 这应该会有所帮助:(msdn.microsoft.com/en-us/library/bb613579.aspx)

标签: c# xaml windows-phone-7 reference windows-phone-8


【解决方案1】:

如果您尝试设置控件的可见性,一种合适的方法是使用可见性“转换器”,将实体中的属性发送到转换器,然后返回所需的可见性状态。

 public class VisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool visible;

        bool.TryParse(value.ToString(), out visible);

        return visible ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

定义你的转换器

您可以将它放在 app.xaml 文件中,以便您的整个应用在需要时可以访问它。

<Application  xmlns:converters="clr-namespace:NamespaceOfYourConverter;assembly=AssemplyOfYourConverter">
   <Application.Resources>
    <ResourceDictionary>
        <converters:VisibilityConverter x:Key="VisibilityConverter" />
    </ResourceDictionary>
   </Application.Resources>
</Application>

设置你的 xaml

<TextBlock Text="hello world" x:Name="dummytext" Visibility="{Binding IsVisible, Converter={StaticResource VisibilityConverter}}" />

有关创建转换器的更多信息,请参阅 Converters 或 Bing “value converters wp8”

【讨论】:

  • 它给了我以下错误。 The resource "VisibilityConverter" could not be resolved. 我确定这是我的一个愚蠢的错误。
  • 谢谢。我现在开始工作了。但奇怪的事情正在发生。它给了我一个错误Invalid XAML. 但它运行没有问题。
【解决方案2】:

通过可视化树从 LongListSelector 中找到您的文本块,而不是使用文本块的属性

参考以下链接

How to find a specific element inside a control using Visual tree in WP7

Visual Tree Enumeration

Find image control using visual tree

【讨论】:

    猜你喜欢
    • 2015-07-04
    • 1970-01-01
    • 2010-12-20
    • 2012-05-09
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    相关资源
    最近更新 更多