#c# #wpf #xaml #resize #controltemplate
#c# #wpf #xaml #изменение размера #controltemplate
Вопрос:
Заранее прошу прощения, поскольку у меня возникли проблемы при попытке придумать наилучший способ передать мою проблему таким образом, который не слишком расплывчат в названии, но будет немного проще для понимания, когда я объясню контекст.
В принципе, у меня есть поле изменяемого размера, состоящее из элементов управления Thumb с текстовым блоком над ним, который помечает связанное поле с подробным описанием того, что это такое.
Проблема здесь в том, что при изменении размера текстовый блок также изменяется, но это происходит только при изменении размера ширины поля. То же самое не происходит, когда я изменяю размер поля по высоте, но моя цель — вообще не изменять его размер.
Предварительный просмотр действия по изменению размера
Я понимаю, что, поскольку textblock сгруппирован с элементом управления изменением размера внутри шаблона элемента управления, имеет смысл, чтобы на него наряду с другими элементами управления-аналогами также влияло изменение размера, но я не понимаю, почему это работает только тогда, когда это влияет на ширину элемента.
Моя цель здесь — найти способ сделать так, чтобы действие изменения размера вообще не влияло на метки, но при этом оставалось в соответствующем поле (в случае, если пользователь решит сказать переместить поле в другое положение)
Вот код для шаблона элемента управления:
<!-- Designer Item Template-->
<ControlTemplate x:Key="DesignerItemTemplate" TargetType="ContentControl">
<Grid x:Name="DesignerGrid" DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}">
<s:MoveThumb x:Name="MoveThumbAdorner" Template="{StaticResource MoveThumbTemplate}" Cursor="SizeAll"/>
<Control Template="{StaticResource ResizeDecoratorTemplate}"/>
<ContentPresenter x:Name="rectCP" Content="{TemplateBinding ContentControl.Content}"/>
<Border x:Name="BoxLabelBorder" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="5,-35" Background="#EEEEEE" BorderBrush="Black" BorderThickness="2" CornerRadius="3">
<Grid x:Name="BoxLabelGrid" Margin="5">
<StackPanel x:Name="BoxLabelStackPanel" Orientation="Horizontal">
<TextBlock Foreground="Black" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Name, Mode=TwoWay}"/>
<Button x:Name="DelClassBtn" Margin="5,0,0,0" Height="15" MinWidth="15" Width="15" Click="DelClassBtn_Click">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="#EEEEEE"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{TemplateBinding Background}">
<ContentPresenter Focusable="False" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" Value="#d6d6d6"/>
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" Value="#bebebe"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Opacity" Value=".35"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
<Image HorizontalAlignment="Center" VerticalAlignment="Center" Height="7" Width="7" Source="/Resources/Images/cross_48.png" />
</Button>
</StackPanel>
</Grid>
</Border>
</Grid>
</ControlTemplate>
Комментарии:
1. просто определите свою высоту и ширину статически с помощью числового значения
2. @DenisSchaf я попытался установить оба параметра для текстового блока, но это ничего не меняет. также причина, по которой я не хочу статическую ширину, заключается в том, что текстовый блок должен растягиваться в зависимости от длины текста внутри
3. итак, вы хотите, чтобы текстовое поле растягивалось, но не растягивалось? Подобная логика должна быть реализована в коде и не может быть выполнена в XAML. Вы можете установить минимальную ширину элемента управления, чтобы предотвратить его уменьшение по сравнению со значением. но тогда окно все равно можно сделать настолько маленьким, что ваш элемент управления частично исчезнет, поэтому вам также придется установить минимальную ширину родительского элемента и повторять это вплоть до вашего окна
4. @DenisSchaf текстовый блок должен растягиваться, чтобы соответствовать своему содержимому при загрузке, а также если текст изменяется при взаимодействии с пользователем (поэтому исключается использование минимальной ширины). Однако его не следует изменять при изменении размера его родственного элемента управления (contentpresenter «rectCP»). Теперь да, если я каким-то образом привяжу minwidth элемента управления к текущей ширине текстового блока, это предотвратило бы эту проблему, но это не является жизнеспособным решением из-за необходимых вариантов использования в отношении этого. Пока я предполагаю, что это может быть связано с тем, как он расположен по слоям