如何将WPF UserControl的DataGrid ToolTip FontSize绑定到我的主XAML窗口中定义的变量?

时间:2017-04-10 22:18:24

标签: wpf xaml data-binding datagrid

我有一个WPF应用程序。 我正在尝试为FontSize中的项目设置BackgroundToolTip {/ 1}}。

我定义了以下XAML代码段:

DataGrid

我在“MyWindow”背后的代码中定义了以下内容

<DataGridTextColumn Binding="{Binding Foo}"
                                Header="Foo"
                                Visibility="Visible"
                                Width="*">
   <DataGridTextColumn.CellStyle>
      <Style TargetType="DataGridCell">
         <Setter Property="ToolTip" >
            <Setter.Value>
               <ToolTip Background="{Binding ElementName=MyWindow,Path=TBackground}" 
                        FontSize="{Binding ElementName=MyWindow,Path=TFontSize}" >
                  <TextBlock Text="{Binding Foo}" />
               </ToolTip>
            </Setter.Value>
         </Setter>
      </Style>
   </DataGridTextColumn.CellStyle>
</DataGridTextColumn>

在运行时,我收到以下错误:

  

System.Windows.Data错误:4:找不到绑定源   引用'ElementName = MyWindow'。 BindingExpression:路径= TBackground;   的DataItem = NULL; target元素是'ToolTip'(Name ='');目标财产   是'背景'(类型'刷')

     

System.Windows.Data错误:4:找不到绑定源   引用'ElementName = MyWindow'。 BindingExpression:路径= TFontSize;   的DataItem = NULL; target元素是'ToolTip'(Name ='');目标财产   是'FontSize'(输入'Double')

我在这里错过了哪些绑定过程?

由于

1 个答案:

答案 0 :(得分:1)

TFontSize属性应为double类型,并返回有效的字体大小&gt; 0:

private double _tFontSize = 20;
public double TFontSize
{
    get { return _tFontSize; }
    set
    {
        _tFontSize = value;
        NotifyPropertyChanged("TFontSize");
    }
}

然后,您可以将Tag的{​​{1}}属性绑定到窗口,然后将DataGridCellFontSize属性绑定到窗口的源属性Background的{​​{1}}属性:

PlacementTarget

由于Tooltip位于自己的可视树中,因此无法使用<DataGridTextColumn.CellStyle> <Style TargetType="DataGridCell"> <Setter Property="Tag" Value="{Binding RelativeSource={RelativeSource AncestorType=Window}}" /> <Setter Property="ToolTip" > <Setter.Value> <ToolTip Background="{Binding Path=PlacementTarget.Tag.TBackground, RelativeSource={RelativeSource Self}}" FontSize="{Binding Path=PlacementTarget.Tag.TFontSize, RelativeSource={RelativeSource Self}}" > <TextBlock Text="{Binding Foo}" /> </ToolTip> </Setter.Value> </Setter> </Style> </DataGridTextColumn.CellStyle> 直接绑定到窗口。