繁体   English   中英

对ElementName使用绑定

[英]Use Binding for ElementName

我无法找到此问题的解决方案:

我正在用ItemControls创建自己的表。 为了调整列的大小,我想将一个单元格的Width-property绑定到该列的相应的ActualWidth-property。

我尝试了以下操作,但不起作用:

<StackPanel Orientation="Vertical">

    <Border BorderBrush="Black" BorderThickness="1">
        <ItemsControl ItemsSource="{Binding Data.Columns}" Margin="26,1,1,1">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <!-- here i set the name of the column (Code) -->
                    <Border BorderBrush="Black" BorderThickness="1,0,0,0" Width="100" x:Name="{Binding Code}">
                        <TextBlock Text="{Binding Header}" />
                    </Border>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Border>


    <ItemsControl ItemsSource="{Binding Data.Rows}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Vertical" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Border BorderBrush="Black" BorderThickness="1,0,1,1">

                    <StackPanel Orientation="Horizontal" Margin="1">

                        <Grid Width="25">
                            <General:SeverityIconControl Severity="{Binding Severity}" />
                        </Grid>

                        <ItemsControl ItemsSource="{Binding Values}">
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <StackPanel Orientation="Horizontal"/>
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <!-- and here i'd like to bind to the ActualWidth of the corresponding column (Code)
                                    but it is not working because ElementName={Binding LocalCode} does not work -->
                                    <Border BorderBrush="Black" BorderThickness="1,0,0,0" Width="{Binding ActualWidth, ElementName={Binding LocalCode}}">
                                        <TextBlock Text="{Binding Value}" />
                                    </Border>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </StackPanel>
                </Border>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</StackPanel>

有没有一种方法可以解决此问题而无需更改数据源(不幸的是,数据源无法编辑)?

您无法绑定x:Name在此处了解更多信息),因为只有在构造函数中调用InitializeComponent()时才会读取它。

最简单的方法是将DesiredWidth列添加到您的Data对象,并将两个宽度都绑定到该宽度(默认值为100)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM