TextBlock в UserControl не отображает текст - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь создать сетку головоломки Nonogram (aka PuzzleCross) в C # / WPF и создал два элемента UserControls, которые содержат ключи строк и столбцов.Каждый UserControl состоит из Border, содержащего TextBlock, с DependencyProperty с именем TextControl, чтобы сделать свойство 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);
        }
    }

1 Ответ

0 голосов
/ 25 июня 2018

A, как

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

работает, только если вы присвоили атрибут x:Name для UserControl:

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

Это, однако, не обязательно для привязки RelativeSource:

Text="{Binding TextContent, RelativeSource={RelativeSource AncestorType=UserControl}}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...