Wpf 在Grid或Stackpanel中独立调整子对象的大小

Wpf 在Grid或Stackpanel中独立调整子对象的大小,wpf,scale,children,Wpf,Scale,Children,我想在触摸应用程序的控件中显示一个图像。除了图像,还有一个文本框显示在它下面,作为一个选项卡,停靠在图像的左下角。该选项卡的宽度小于图像的宽度。用户可以调整图像的大小、移动和旋转,但我希望文本框选项卡保持相同的大小,并与图像保持相同的相对位置 我尝试使用StackPanel和Grid,但这两次文本框/选项卡和图像都被放大 网格或StackPanel是一种选择吗?如果是,当第一个子项的大小改变时,如何强制文本框/选项卡(即第二个子项)的大小 谢谢 响应LAR: <Grid Name="my

我想在触摸应用程序的控件中显示一个图像。除了图像,还有一个文本框显示在它下面,作为一个选项卡,停靠在图像的左下角。该选项卡的宽度小于图像的宽度。用户可以调整图像的大小、移动和旋转,但我希望文本框选项卡保持相同的大小,并与图像保持相同的相对位置

我尝试使用StackPanel和Grid,但这两次文本框/选项卡和图像都被放大

网格或StackPanel是一种选择吗?如果是,当第一个子项的大小改变时,如何强制文本框/选项卡(即第二个子项)的大小

谢谢

响应LAR:

 <Grid Name="mygrid" Background="Red" Width="320" Height="300">

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="255"/>
        <RowDefinition MaxHeight="40" />
    </Grid.RowDefinitions>

    <!--Ist child-->
    <Canvas Name="maincanvas" Background="DarkKhaki" Width="300" Height="180" Grid.Row="0">
        <!--<Image goes in here>-->
    </Canvas>

    <!--2nd child-->
    <DockPanel Name="dockpanel" Grid.Row="1"  Background="DarkKhaki" MaxWidth="200" HorizontalAlignment="Left">
        <TextBlock Name="textblock" TextWrapping="Wrap" >
            some text here
        </TextBlock>
    </DockPanel>
</Grid>

这里有一些文字
我想做的是允许用户拖动图像并调整其大小(第一个子对象),同时保持文本块(第二个子对象)的大小和相对位置。因此,效果是固定在图像左下角的选项卡,因为图像可以动态调整大小


我试图添加图像,以使这更清楚,但作为一个新用户,我不能,对不起

讽刺的是,您在XAML中使用DockPanel替换了您的帖子中的图像:我想这就是你想要的——一个DockPanel,上面的部分可以缩放内容,下面的部分则不能

关键是最后将图像容器添加到DockPanel,以便自动为其提供屏幕的其余部分。并将其Dock属性设置为“Top”

e、 g.(顺便说一句,我还没有测试过这个。我只是觉得这个会比我之前发布的更好一些)


威尔:LayoutTransform是一个非常简单的解决方案。我把主图像和标签放入一个堆叠面板。然后,我将缩放变换作为LayoutTransform而不是RenderTransform应用于图像,并将平移和旋转变换应用于stackpanel。问题已解决:-)

如果您能展示一些简单的xaml来演示您的观点,这会有所帮助。这还不足以解决问题,您打算如何应用转换?或者您想使用一些混合行为?目前我正在使用根据触摸事件生成的矩阵变换:
matrix.ScaleAt(e.DeltaManipulation.Scale.X,e.DeltaManipulation.Scale.Y,center.X,center.Y);i、 RenderTransform=新矩阵变换(矩阵)嗯,如果你的文本块部分依赖于图像的变换,你应该尝试将其分割成一个具有旋转、缩放和平移变换的变换组,你能做到吗?是的,有点!我一直在胡闹,但收效有限。我想我希望有某种方法可以在Grid/StackPanel/which XAML中指定类似“将此位保持为固定大小/宽度”这样的内容,并使生活更轻松:-)注意指定文本相对位置的部分,我认为这太静态了,不符合提问者的想法。@H.B.谢谢,所以我猜他是说如果用户在画布上从左向右移动图像,标签的位置需要跟随它?是的,我认为它应该是一个标签,跟随图像。没错,是的。用户可以移动、旋转和调整图像大小,文本框/选项卡的大小保持不变,固定在图像的左下角。“左下角”指的是原始的左下角,因此它会随着图像旋转。@Will-doh,我想即使是我的编辑也不会有帮助。因此,当图像旋转时,是否希望TabControl随图像一起旋转?如果是这样的话,那么我想你想做我列出的事情,但是你需要把所有的东西都包装在一个容器中,然后将旋转角度数据绑定到旋转变换。
<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <Page.Resources>
    <!-- put LeftMarginConverter here -->
  </Page.Resources>

  <DockPanel>
    <TabControl DockPanel.Dock="Bottom" Margin="{Binding ImageX, Converter={StaticResource LeftMarginConverter}}">
      <TabItem Header="Some text here" />
    </TabControl>
    <Canvas DockPanel.Dock="Top">
      <Image Canvas.Left="{Binding ImageX}">
        <!-- image goes here -->
      </Image>
    </Canvas>
  </DockPanel>
</Page>
public class LeftMarginConverter : IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        int left_margin = object as int;
        return new Thickness( left_margin,0,0,0);
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        // we aren't ever going to need to convert back for this formatter!
        return null;
    }

    #endregion
}