Я получил ListView
:
<ListView Grid.Row="4" Grid.Column="1"
ItemsSource="{Binding Path=ListViewAgentItems, Mode=TwoWay}"
HorizontalAlignment="Left"
HorizontalContentAlignment="Left"
SizeChanged="ListView_SizeChanged">
<ListView.View>
<GridView>
<GridViewColumn HeaderContainerStyle="{StaticResource ListViewStyle}" Header="Agent ID" DisplayMemberBinding="{Binding AgentId}"/>
<GridViewColumn HeaderContainerStyle="{StaticResource ListViewStyle}" Header="Distance" DisplayMemberBinding="{Binding Distance}"/>
</GridView>
</ListView.View>
</ListView>
Я хочу, чтобы GridViewColumn
взял 50% ширины всего GridView вместо поведения по умолчанию, в котором столбцы соответствуют их ширине длясодержание.Конечно, сам ListView
должен также принимать всю ширину столбца, в котором он находится.
Итак, я добавил это SizeChanged
событие:
private void ListView_SizeChanged(object sender, SizeChangedEventArgs e)
{
ListView listView = sender as ListView;
GridView gView = listView.View as GridView;
var workingWidth = listView.ActualWidth - SystemParameters.VerticalScrollBarWidth; // take into account vertical scrollbar
var col1 = 0.5;
var col2 = 0.5;
gView.Columns[0].Width = workingWidth * col1;
gView.Columns[1].Width = workingWidth * col2;
}
Что происходит, так этособытие продолжает вызываться, и значение workingWidth
продолжает уменьшаться и уменьшаться, пока не достигнет отрицательного значения, и в этом случае я получаю исключение, потому что отрицательное значение не может быть установлено для свойства width.Как я могу решить эту проблему и получить желаемый результат размером 50% для каждого столбца?