代码之家  ›  专栏  ›  技术社区  ›  Berryl

访问代码中的可视元素

  •  1
  • Berryl  · 技术社区  · 16 年前

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

    DayOfWeekColumn是DataGridTextColumn的子类。我可以很容易地获取标题并设置它的内容,现在我想在代码中设置工具提示,在上面的xaml中我就是这样做的。

    干杯,

    编辑=========

    到目前为止,这是DayOfWeekColumn的代码。xaml中的TextBlock是头的可视化树的一部分,而不是我想保留在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 回复  |  直到 16 年前
        1
  •  1
  •   jrwren odony    16 年前

    ChrisAndersen的EssentialWindowsPresentationFoundation的第161页基本上回答了这个问题。如果你有,我推荐它作为参考。

    但是,你离我太近了,我不知道你是怎么错过的:)

    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. :)";
    }
    
        2
  •  0
  •   Brian Driscoll    16 年前

    为TextBlock指定一个带有x:name属性的名称,您应该能够通过该名称在代码中访问它。

    <TextBlock x:Name="textBlock1" />
    
    推荐文章