Хотя это отображается как ошибка, Visual Studio все равно будет создавать и выполнять код.

с: Как мне связатьStatName.Width вSamp1.ActualWidth + Samp2.ActualWidth?

Суб-вопросы:

Почему мойWidthConverter функции никогда не выполняются (точки останова никогда не достигают)?

Что является правильным<Binding ... синтаксис для отдельных компонентов MultiBinding?

Что я пробовал:

Я думаю, что мне нужно назначитьDataGridTextColumn.Width с участиемMultiBinding и какой-то тип конвертера.

Я попытался собрать решение из различных примеров в Интернете. Я не могу собрать все это вместе.

РЕДАКТИРОВАТЬ

С использованием<Binding ElementName="Samp1" Path="ActualWidth" />

Нет ошибок сборки или предупреждений.Convert функция не ударилНет соответствующих сообщений в выводе

С использованием<Binding Source="{x:Reference Samp1}" Path="ActualWidth" />

Ошибка сборки (которая все еще позволяет выполнение): указанное приведение недопустимо. За<MultiBinding>...</MultiBinding>.Convert трижды вызывается при загрузке. Не вызывается при изменении размера столбцаSamp1.На каждом исполненииConvert:

System.Windows.Data Error: 5 : Value produced by BindingExpression is not valid for target property.; Value='40' MultiBindingExpression:target element is 'DataGridTextColumn' (HashCode=64879470); target property is 'Width' (type 'DataGridLength')

Попытка MultiBinding (часть xaml)

<Page.Resources>
    <local:WidthConverter x:Key="WidthConverter" />
</Page.Resources>

<StackPanel>

    <DataGrid IsReadOnly="True" HeadersVisibility="Column">
        <DataGrid.Columns>
            <DataGridTextColumn x:Name="Samp1" Binding="{Binding a}" Header="S1" />
            <DataGridTextColumn x:Name="Samp2" Binding="{Binding b}" Header="S2" />
            <DataGridTextColumn x:Name="Total" Binding="{Binding c}" Header="Tot" />
        </DataGrid.Columns>
        <local:MyGenericRecord a="5000" b="2500" c="7500" />
        <local:MyGenericRecord a="1000" b="1500" c="2500" />
    </DataGrid>

    <DataGrid IsReadOnly="True" HeadersVisibility="Column">
        <DataGrid.Columns>
            <DataGridTextColumn x:Name="StatName"  Binding="{Binding a}" Header="Stat">
                <DataGridTextColumn.Width>
                    <MultiBinding Converter="{StaticResource WidthConverter}">
                        <Binding ElementName="Samp1" Path="ActualWidth" />
                        <Binding ElementName="Samp2" Path="ActualWidth" />
                    </MultiBinding>
                </DataGridTextColumn.Width>
            </DataGridTextColumn>
            <DataGridTextColumn x:Name="StatValue" Binding="{Binding b}" Header="Val" Width="{Binding ElementName=Total, Path=ActualWidth}" />
        </DataGrid.Columns>
        <local:MyGenericRecord a="Min" b="2500" />
        <local:MyGenericRecord a="Max" b="7500" />
        <local:MyGenericRecord a="Average" b="5000" />
    </DataGrid>

</StackPanel>

Попытка MultiBinding (часть кода)

public class WidthConverter : IMultiValueConverter
{

    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        double totalWidth = 0;

        foreach (DataGridLength Width in values)
            totalWidth += Width.Value;

        return totalWidth;
    }
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос