доступ к визуальному элементу в коде - PullRequest
1 голос
/ 04 августа 2010

Я хотел бы сделать эквивалент следующего xaml в коде, но я не знаю, как получить этот элемент текстового блока:

<local:DayOfTheWeekColumn 
    ...
    <local:DayOfTheWeekColumn.Header>
        <TextBlock 
            Text="{Binding ...}, 
            ToolTip="{Binding ...} />                                  
    </local:DayOfTheWeekColumn.Header>
</local:DayOfTheWeekColumn>

DayOfTheWeekColumn является подклассом DataGridTextColumn.Я могу достаточно легко добраться до заголовка и установить его содержимое, и теперь я хочу установить всплывающую подсказку в коде, чтобы понять, как это сделать, как я это делаю в xaml выше.

Cheers,
Berryl

РЕДАКТИРОВАТЬ =========

Здесь приведен код DayOfTheWeekColumn.TextBlock в xaml является частью визуального дерева заголовка, а не тем, что я хочу сохранить в xaml.Я действительно хочу получить доступ к подсказке, хотя, в коде, так что я могу установить его там.

Я думаю, что должно быть свойство Children в заголовке столбца, к которому я могу получить доступ, чтобы найти TextBlock, но нетпока не нашел этого.

public class DayOfTheWeekColumn : DataGridTextColumn
{
    public static readonly DependencyProperty DowDateProperty = DependencyProperty.RegisterAttached(
        "DowDate", typeof (DateTime), typeof (DayOfTheWeekColumn), new PropertyMetadata(OnDateChanged));

    public DateTime DowDate
    {
        get { return (DateTime)GetValue(DowDateProperty); }
        set { SetValue(DowDateProperty, value); }
    }

    private static void OnDateChanged(DependencyObject target, DependencyPropertyChangedEventArgs e) {
        var col = (DataGridTextColumn) target;
        var date = (DateTime) e.NewValue;

        col.Header = date.ToString(Strings.ShortDayOfWeekFormat);
        //col.Header.ToolTip = "If Only It Were so Easy!!" <==============
    }

    public DayOfTheWeekColumn() {
        Width = 60;
        CanUserReorder = false;
        CanUserResize = false;
        CanUserSort = false;
    }
}

Ответы [ 2 ]

1 голос
/ 04 августа 2010

p161 из Essential Windows Presentation Foundation Криса Андерсена в значительной степени отвечает на этот вопрос.Если у вас есть, я рекомендую его в качестве справки.

Тем не менее, вы так близко, я не уверен, как вы пропустили это:)

private static void OnDateChanged(DependencyObject target, DependencyPropertyChangedEventArgs e) {
    var col = (DataGridTextColumn) target;
    var date = (DateTime) e.NewValue;

    var textblock = new TextBlock();
    col.Header = textblock;
    textblock.Text = date.ToString(Strings.ShortDayOfWeekFormat);
    textblock.ToolTip = "It is that easy. :)";
}
0 голосов
/ 04 августа 2010

Дайте вашему TextBlock имя с атрибутом x: Name, и вы сможете получить к нему доступ в коде с этим именем.

<TextBlock x:Name="textBlock1" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...