WrapPanel ширина привязки - PullRequest
       1

WrapPanel ширина привязки

1 голос
/ 17 февраля 2011

Как я могу привязать ширину WrapPanel к ширине первого столбца ListView. Оба элемента управления находятся в пользовательском контроле.

1 Ответ

1 голос
/ 17 февраля 2011

Для GridViewColumn у вас есть свойство ActualWidth, которое не является свойством зависимости, поэтому, если вы привязываете его напрямую, вы не получите никаких обновлений при изменении свойства. Тогда у вас есть свойство Width, которое является свойством зависимости и даст вам правильное значение для большинства случаев, но не всегда, например, при автогазировании. Сочетание этих двух должно дать вам желаемый результат, хотя. То есть слушайте изменения в свойстве Width и возвращайте ActualWidth с MultiBinding

Xaml

<WrapPanel ...>
    <WrapPanel.Width>
        <MultiBinding Converter="{StaticResource GridViewColumnWidthMultiConverter}">
            <Binding ElementName="listView" Path="View.Columns[0].Width"/>
            <Binding ElementName="listView" Path="View.Columns[0].ActualWidth"/>
        </MultiBinding>
    </WrapPanel.Width>
</WrapPanel>
<ListView Name="listView" ...>
    <ListView.View>
        <GridView>
            <GridView.Columns>
                <GridViewColumn .../>
                <GridViewColumn .../>
                <GridViewColumn .../>
                <!--...-->
            </GridView.Columns>
        </GridView>
    </ListView.View>
</ListView>

GridViewColumnWidthMultiConverter

public class GridViewColumnWidthMultiConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        double width = (double)values[0];
        double actualWidth = (double)values[1];
        return actualWidth;
    }
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...