Дочерние расширители не изменят размер родительского элемента управления после изменения размера вручную - PullRequest
0 голосов
/ 08 января 2020

У меня есть несколько UserControl с Canvas. Внутри каждого пользовательского элемента управления у меня есть что-то вроде этого:

<Grid>
    <!--other things among resizing thumb-->
    <Grid Name="ContentGrid" Grid.Row="1" Grid.Column="1" UseLayoutRounding="True" Background="Transparent" Width="auto" Height="auto">
        <ContentPresenter x:Name="BorderShape" IsHitTestVisible="False" HorizontalAlignment="Left" VerticalAlignment="Top"
                          Panel.ZIndex="{Binding Source={x:Static props:Settings.Default},Path=ZIndex_EntityShape}"
                          Content="{Binding ElementName=Root,Path=MyShape, Mode=OneWay}"/>
        <ContentControl x:Name="BorderContent" DataContext="{Binding .}" Background="Transparent" HorizontalAlignment="Left" VerticalAlignment="Top"
                        SizeChanged="BorderContent_SizeChanged"
                        Content="{Binding ElementName=Root,Path=DataContext, Mode=TwoWay}"
                        ContentTemplateSelector="{Binding Source={x:Static chartRoot:ChartCustomControl.Instance}, Path=EntityContentTemplateSelector, Mode=OneWay}"/>
    </Grid>
</Grid>

Теперь BorderContent - это еще один пользовательский элемент управления, который я загружаю через плагины MEF, который может содержать такие элементы, как расширители, которые могут изменять размер BorderContent, и обычно родительский элемент UserControl изменяет размер с помощью этих элементов управления.

Я использую типичный перетаскивание влево-вниз-угол-большой палец для предварительного просмотра событий мыши для изменения размера родительского элемента UserControl. Примерно так в событии PreviewMouseMove большого пальца:

var v = currentMousePositionRelativeToCanvas - _ThumbPositionWhenClickedRelativeToCanvas;
BorderContent.Width = Math.Max(BorderContent.ActualWidth + (v.X * Scale), _MinSize);
BorderContent.Height = Math.Max(BorderContent.ActualHeight + (v.Y * Scale), _MinSize);

После изменения размера пользовательского элемента управления вручную с помощью большого пальца он перестает изменять размер с помощью внутренних элементов управления BorderContent, он просто больше не будет этого делать , он просто остается в новом размере, что бы ни происходило внутри BorderContent, скрывая все, что выходит за пределы этого размера.

У меня есть другие вещи, которые зависят от размера BorderContent, поэтому в ручном изменении размера я просто изменяю BorderContent размер (BorderShape и родительский UserControl размеры изменяются при привязке), а не размер родительского элемента управления.

Это похоже на то, что если в данный момент я изменю BorderContent размер вручную, изменится некоторое логическое значение, и после этого он игнорирует собственные изменения DesiredSize, поэтому, когда расширители расширяются, размер больше не изменяется. Родительский MeasureOverride больше не будет вызываться, поэтому я не могу его использовать.

Я хочу, чтобы родительский пользовательский элемент управления адаптировался к внутреннему контенту: если внутреннему контенту требуется расширитель, родитель должен иметь возможность чтобы показать это.

Что я могу сделать? Я попробовал несколько вещей, использование Viewbox было самым простым, но это просто изменило масштаб, а не размер (когда расширитель расширяется, содержимое просто уменьшается, чтобы уместить его внутри контейнера).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...