WPF - 图像上的按钮在运行时移动

时间:2011-03-13 04:04:17

标签: wpf button rendering

我有一个显示包含图像和3个按钮的网格的程序。这些按钮在Visual Studio设计器中已经调整大小以适合单独的圆圈(直径约为1/4“)。当我运行程序时,每个按钮都向下移动,向右移动大约1/2的宽度。如果我为每个按钮添加一个明确的宽度和高度,我可以保持大小相同但按钮仍然略微向右移动,甚至可能略微下降。

我的猜测是,它与Windows如何显示图像以适应屏幕以及此缩放/定位尚未应用于按钮有关。如果是这样,我不知道如何纠正这个问题。

非常感谢任何关于如何纠正这个问题的想法。

克里斯

我的XAML代码:

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Title="MainWindow"

    Height="{Binding Source={x:Static SystemParameters.WorkArea}, Path=Height}"

    Width="{Binding Source={x:Static SystemParameters.WorkArea}, Path=Width}"

    WindowStartupLocation="CenterScreen"

    Background="CornflowerBlue"

    ResizeMode="CanMinimize"

    >

<Window.Resources>

    <Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">

        <Setter Property="Background" Value="Black"/>

        <Setter Property="Opacity" Value="1"/>

        <Style.Triggers>

            <Trigger Property="IsMouseOver" Value="True">

                <Setter Property="Cursor" Value="Hand"/>

            </Trigger>

        </Style.Triggers>

     </Style>

</Window.Resources>

<Grid Name="grid1">

    <Image Name="image" Source="D:\CEP\Image1.jpg" Stretch="Uniform">

    </Image>

    <Button Margin="494,0,1155,801" Click="button_407_Click"></Button>

    <Button Margin="339,107,1310,856" />

    <Button Margin="401,102,1248,860" />

</Grid>

1 个答案:

答案 0 :(得分:0)

将“图像”的“拉伸”属性设置为“无”以防止图像大小调整。

您已通过设置边距来定位按钮。一旦窗口调整大小,它们的位置和大小就会改变。

将Canvas添加到网格中,并使用绝对定位将图像和按钮放在画布上(Canvas.Left =“...”Canvas.Top =“...”

如果在执行此操作后,您不喜欢结果,因为您仍然希望调整图像大小并同步移动按钮,则可以将Canvas包装在ViewBox中以使其缩放。

修改

<Grid>
    <Viewbox>
        <Grid HorizontalAlignment="Center" VerticalAlignment="Center">
            <Image Source="Images\wp_1680.jpg" Width="300" Height="200" 
                    HorizontalAlignment="Center" VerticalAlignment="Center"/>
            <Canvas Width="300" Height="200"
                    HorizontalAlignment="Center" VerticalAlignment="Center">
                <Button Canvas.Top="25" Canvas.Left="50" Content="OK"/>
                <Button Canvas.Top="125" Canvas.Left="150" Content="Cancel"/>
            </Canvas>
        </Grid>
    </Viewbox>
</Grid>

此解决方案包括通过Viewbox进行的良好扩展,但也可以将其删除。

请整理所有帖子。如果您想对我的回答说些什么,请将其添加为我的回答,如果您想添加问题,请编辑问题。