c# - UserControl 中的 TextBlock 不显示文本

标签 c# wpf user-controls border textblock

我正在尝试在 C#/WPF 中创建一个 Nonogram(又名 PuzzleCross)拼图网格,并创建了两个 UserControls 来包含行键和列键。每个 UserControl 都包含一个包含 TextBlock 的 Border,以及一个名为 TextControl 的 DependencyProperty,以使 Text 属性可以在 UserControl 之外访问。一切正常,除了文本在运行时实际上没有显示。 TextControl 包含正确的文本,正如使用 MouseDown 事件和 MessageBox 测试的那样,但由于某种原因文本不存在。

谁能帮我弄清楚我错过了什么?我觉得这是一件简单的事情,但我只是没有看到。

水平用户控件:

    <Border BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Center" Height="10" Width="100">
        <TextBlock Text="{Binding ElementName=HorizontalRowLabel, Path=TextContent}" Foreground="Black" FontSize="6" MouseDown="TextBlock_MouseDown"/>
    </Border>

水平 C#:

public partial class HorizontalRowLabel : UserControl
{
    public static readonly DependencyProperty TextContentProperty = DependencyProperty.Register("TextContent", typeof(string),
        typeof(HorizontalRowLabel), new FrameworkPropertyMetadata(""));
    public string TextContent
    {
        get { return (string)GetValue(TextContentProperty); }
        set { SetValue(TextContentProperty, value); }
    }

    private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
    {
        MessageBox.Show(TextContent);
    }

    public HorizontalRowLabel()
    {
        InitializeComponent();
    }
}

    //Adds text HorizontalRowLabel UserControl, then adds HRL to Grid.
    public void InitRowKeys(Grid puzzle)
    {
        for(int i = 0; i < HorizontalKeys.Length; i++)
        {
            RowDefinition row = new RowDefinition();
            HorizontalRowLabel hrow = new HorizontalRowLabel();

            row.Height = new GridLength(10);

            for(int j = 0; j < HorizontalKeys[i].Length; j++)
            {
                if(HorizontalKeys[i].Length == 0 || j == HorizontalKeys[i].Length - 1)
                {
                    hrow.TextContent += HorizontalKeys[i][j].ToString();
                    hrow.Foreground = Brushes.Black;
                    hrow.SetValue(Grid.RowProperty, i);
                    hrow.SetValue(Grid.ColumnProperty, 0);
                    hrow.FontSize = 6;
                    hrow.HorizontalAlignment = HorizontalAlignment.Right;
                    hrow.VerticalAlignment = VerticalAlignment.Center;

                }
                else
                {
                    hrow.TextContent += HorizontalKeys[i][j].ToString() + " ";
                    hrow.SetValue(Grid.RowProperty, i);
                    hrow.SetValue(Grid.ColumnProperty, 0);
                    hrow.FontSize = 6;
                    hrow.HorizontalAlignment = HorizontalAlignment.Right;
                    hrow.VerticalAlignment = VerticalAlignment.Center;
                }
            }
            //puzzle.Margin = new Thickness(0,50,0,0);
            hrow.Width = 100;
            hrow.Height = 30;


            puzzle.RowDefinitions.Add(row);
            puzzle.Children.Add(hrow);
        }
    }

最佳答案

像这样的绑定(bind)

Text="{Binding ElementName=HorizontalRowLabel, Path=TextContent}"

仅当您已将 x:Name 属性分配给 UserControl 时才有效:

<UserControl ... x:Name="HorizontalRowLabel">
    ...
</UserControl>

然而,对于 RelativeSource 绑定(bind)来说,这不是必需的:

Text="{Binding TextContent, RelativeSource={RelativeSource AncestorType=UserControl}}"

关于c# - UserControl 中的 TextBlock 不显示文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51023877/

相关文章:

javascript - 使用 jquery 选择一个 Asp.net 控件

c# - ASP.NET MVC5 未为请求的 URL 配置网络服务器,且服务器上未启用目录浏览

c# - ICommand 缺少 namespace 或类型

c# - 如何使用 VS2008 将事件与 WPF 中的菜单项相关联?

c# - 所选 ListView 项目的数量?

wpf - 命令绑定(bind)到用户控件拖放

c# - 将用户控制类传递给主机页面

c# - 如何删除字符串中两个单词之间的多余空格?

wpf - 如何在 WPF 中执行 Graphics.DrawString() 的等效操作?

c# - 使用现有部件重新设计控件模板