Если приложение wpf установило UseLayoutRounding в true для окна, то gridsplitter больше не будет работать для некоторых оконных ширин (он будет застревать в исходном положении), например, пример ниже.WPF Gridsplitter не работает с UseLayoutRounding
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="200" Width="401"
UseLayoutRounding="True">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0">
long string that does not fit within the textblock - long string that does not fit within the textblock
</TextBlock>
<GridSplitter Grid.Column="1" HorizontalAlignment="Center" Width="50" Background="LightBlue" />
<TextBlock Grid.Column="2">
long string that does not fit within the textblock - long string that does not fit within the textblock
</TextBlock>
</Grid>
</Window>
Обратите внимание, что для примера, чтобы генерировать ошибку окна Ширина должна быть 401, текст в текстовых полях должно быть длиннее, чем текстовое поле и UseLayoutRounding должно быть истинным.
Любой, кто знает, как избежать этого или иметь обходное решение? Я не хочу устанавливать UseLayoutRounding в false, поскольку он вызывает рендеринг артефактов в моем приложении.
Edit: Для других людей с той же проблемой, я обнаружил, что этот пользователь сделал компонент, который решает эту проблему: http://blog.onedevjob.com/2011/12/11/fixing-wpf-gridsplitter/ все еще будет хорошо, если бы она могла быть решена с компонентами МОФ по умолчанию, хотя.
Спасибо за ответ, на самом деле это не работает, это просто меняется, какая ширина окна сплиттер застревает. Ширина окна 403 для вышеприведенного кода все равно породит ошибку. – GulPaprika