【问题标题】:Bind to a property of a parent element in wpf绑定到 wpf 中父元素的属性
【发布时间】:2011-01-27 05:32:12
【问题描述】:

'我想将 RichTextBox 的 Height 属性绑定到 GridView 的 Row 的 Height 属性。我怎样才能做到这一点?我不知道如何获取行的高度,因为我无法在 xaml 中访问我想做的行。

Ancestor 类型应该是 GridViewHeaderRow ,但我不知道它的级别...

编辑:

 <my:RadGridView  Height="524" RowHeight="300" ItemsSource="{Binding Lessons}" AutoGenerateColumns="False" Name="dataGrid1" VerticalAlignment="Top" SelectionMode="Single" CanUserSortColumns="False" IsFilteringAllowed="False">

            <my:RadGridView.Columns>
                <my:GridViewDataColumn  DataMemberBinding="{Binding SchoolclassName}" Header="Schoolclass" Width="0.1*" />
                <my:GridViewDataColumn DataMemberBinding="{Binding SubjectName}"     Header="Subject"      Width="0.1*" />

                <my:GridViewDataColumn  Width="0.3*" Header="Homework">
                    <my:GridViewDataColumn.CellTemplate>
                        <DataTemplate>
                            <RichTextBox Height="{Binding ElementName=dataGrid1,Path=RowHeight}" >
                                <FlowDocument>
                                    <Paragraph>
                                        <Run Text="{Binding Homework}"/>
                                    </Paragraph>
                                </FlowDocument>
                            </RichTextBox>                                
                        </DataTemplate>
                    </my:GridViewDataColumn.CellTemplate>


<my:RadGridView Height="524" ItemsSource="{Binding Lessons}" AutoGenerateColumns="False" Name="dataGrid1" VerticalAlignment="Top" SelectionMode="Single" CanUserSortColumns="False" IsFilteringAllowed="False">
            <my:RadGridView.Columns>

                <my:GridViewDataColumn Name="ContentColumn" Width="0.3*" Header="Content">
                    <my:GridViewDataColumn.CellTemplate>
                        <DataTemplate>
                            <RichTextBox Height="{Binding ElementName=MyRowNameToBindTo,Path=Height}">
                                <FlowDocument>
                                    <Paragraph>
                                        <Run Text="{Binding Content}"/>
                                    </Paragraph>
                                </FlowDocument>
                            </RichTextBox>
                        </DataTemplate>
                    </my:GridViewDataColumn.CellTemplate>

...

【问题讨论】:

    标签: wpf properties element bind parent


    【解决方案1】:

    我不了解您的 RadGridView。但我要尝试的第一件事是使用 RelativeSource Binding 和 FindAncestor 沿着可视化树向上走,直到找到 GridViewHeaderRow 并绑定到它的 Height 属性。

    ... Height="{绑定高度, RelativeSource={RelativeSource 模式=FindAncestor, AncestorType={x:Type GridViewHeaderRow }}}" ...

    您可能必须沿着树向上走才能找到 RadGridView,然后再向下走回到标题行。

    ... Height="{绑定 HeaderRow.Height, RelativeSource={RelativeSource 模式=FindAncestor, AncestorType={x:Type RadGridView }}}" ...

    ... Height="{绑定行[0].Height, RelativeSource={RelativeSource 模式=FindAncestor, AncestorType={x:Type RadGridView }}}" ...

    取决于 RadGridView 的实现。

    【讨论】:

    • 我已经用更新的代码更改/编辑了 init 问题:为什么我会收到错误: 我忘了,那个 RadGridView有一个 RowHeight 属性,我可以通过 ElementName 绑定...
    • 为什么会出现这个错误? System.Windows.Data 错误:4:找不到与引用“ElementName = dataGrid1”进行绑定的源。绑定表达式:路径=行高度;数据项=空;目标元素是'RichTextBox'(名称='');目标属性是“高度”(类型“双”)
    • 好吧,还有一个理由讨厌 Teleriks 蹩脚的数据网格。公共双行高{get; set;} 它没有依赖属性...:S
    • 您的 RadGridView 可能没有 NameScope,因此遇到了与此处讨论的相同问题 - joshsmithonwpf.wordpress.com/2008/07/22/…
    • 现在控制住自己:在本机 DataGrid 中使用它 有效! :P 似乎这一次 MS 做了他们的功课,虽然这很特别 XD
    猜你喜欢
    • 2017-07-20
    • 1970-01-01
    • 2018-05-14
    • 2015-08-30
    • 2010-12-11
    • 1970-01-01
    • 2011-05-11
    • 2011-03-16
    • 2020-07-07
    相关资源
    最近更新 更多