1

英語の文法が苦手で申し訳ありません。WPF グリッドに四角形を描画しようとしています。私はそれを描きますが、この長方形はグリッドの右側と下側に表示されません。私は何をすべきか?これは私の XAML とコードです。

< ウィンドウ x:Class="DrawCircle.MainWindow"

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

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

    Title="MainWindow" Height="350" Width="525"
    MouseLeftButtonUp="window_MousLefteUp" MouseRightButtonUp="window_MouseRightButtonUp"
    MouseMove="Grid_MouseMove"
    MouseDown="Grid_MouseDown" >

<Grid x:Name="window"  Margin="0,0,0,0" Background="PaleGreen"  VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ClipToBounds="False">

    <Grid.RenderTransform>
        <TransformGroup>

            <ScaleTransform x:Name="scaleTransform1" ScaleX="0.5" ScaleY="0.5" />
            <TranslateTransform x:Name="translateTransform1" X="0" Y="0" />

        </TransformGroup>
    </Grid.RenderTransform>

</Grid>

その背後にあるコードは次のとおりです。

public partial class MainWindow : Window
{

    bool cornerPointed = false;
    Point corner1;
    Rectangle myRectangle;        

    public MainWindow()
    {
        InitializeComponent();
        myRectangle = new Rectangle();
        myRectangle.HorizontalAlignment = HorizontalAlignment.Left;
        myRectangle.VerticalAlignment = VerticalAlignment.Top;
        myRectangle.Stroke = Brushes.Red;
        window.Children.Add(myRectangle);
    }
    private void Grid_MouseDown(object sender, MouseButtonEventArgs e)
    {

        cornerPointed = true;
        corner1 = new Point(e.GetPosition(this.window).X, e.GetPosition(this.window).Y);
        myRectangle.Margin = new Thickness(corner1.X, corner1.Y, 0, 0);
    }

    private void Grid_MouseMove(object sender, MouseEventArgs e)
    {
        if (cornerPointed == true)
        {
            Point corner2 = e.GetPosition(this.window);
            myRectangle.Margin = new Thickness(System.Math.Min(corner1.X, corner2.X),
                                               System.Math.Min(corner1.Y, corner2.Y),
                                               0, 0);
            myRectangle.Width = Math.Abs(e.GetPosition(this.window).X - corner1.X);
            myRectangle.Height = Math.Abs(e.GetPosition(this.window).Y - corner1.Y);
        }
    }

    private void window_MousLefteUp(object sender, MouseButtonEventArgs e)
    {

        cornerPointed = false;
        myRectangle = new Rectangle();
        myRectangle.HorizontalAlignment = HorizontalAlignment.Left;
        myRectangle.VerticalAlignment = VerticalAlignment.Top;
        myRectangle.Stroke = Brushes.Red;
        window.Children.Add(myRectangle);

    }
}
4

2 に答える 2

0

緑のグリッドがウィンドウ全体を埋めない理由を尋ねていますか? その場合、グリッドの幅と高さを 50% 縮小する次の行が原因です。

<ScaleTransform x:Name="scaleTransform1" ScaleX="0.5" ScaleY="0.5" />

それが問題でない場合は、何が問題なのかを明確にしてください。

于 2012-11-13T14:13:49.460 に答える
0

scaletransform は緑のグリッドを縮小しています。緑のグリッドに赤い四角形を直接描いているので、赤い四角形が緑を超えないようにします。

緑を小さなサイズにしたいが、赤をどこにでも行きたい場合は、次のような別のグリッドを使用できます。

  <Grid x:Name="window">
    <Grid Background="PaleGreen">
      <Grid.RenderTransform>
        <TransformGroup>
          <ScaleTransform x:Name="scaleTransform1" ScaleX="0.5" ScaleY="0.5" />
          <TranslateTransform x:Name="translateTransform1" X="0" Y="0" />
        </TransformGroup>
      </Grid.RenderTransform>
    </Grid>
  </Grid>

編集: これは、スライダーを使用して「ズーム」効果を示す追加の例です。スライダーを動かすと、赤い四角形もズームされます。

  <DockPanel LastChildFill="True">
    <Slider x:Name="sldZoom" DockPanel.Dock="Top" Orientation="Horizontal" Minimum="0" Maximum="1" Value="1"/>
    <Grid Background="PaleGreen" x:Name="window">
      <Grid.RenderTransform>
        <TransformGroup>
          <ScaleTransform x:Name="scaleTransform1"
                          ScaleX="{Binding ElementName=sldZoom, Path=Value, Mode=OneWay}"
                          ScaleY="{Binding ElementName=sldZoom, Path=Value, Mode=OneWay}" />
        </TransformGroup>
      </Grid.RenderTransform>
    </Grid>
  </DockPanel>

EDIT2: 必要に応じて、スライダーのスケール (または使用するバインディング プロパティ) を変更することもできます。たとえば、0 ~ 1 のスケールを使用する代わりに、0 ~ 10 のスケールを使用できます。つまり、10 に設定すると、10 倍のズーム効果が得られます。

書き込みできない空白ができるポイントまでズームアウトを無効にしたい場合は、ベース スケールを 1 に設定します。これは、1 ~ 10 倍のスケールを与える上記のサンプルにドロップできるスライダーです。これにより、ユーザーが書き込み不可能な領域になるまでズームアウトすることができなくなります。(数字をいじって、快適な設定を取得できます)。

<Slider x:Name="sldZoom" DockPanel.Dock="Top" Orientation="Horizontal" Minimum="1" Maximum="10" Value="2"/>
于 2012-11-13T14:20:05.783 に答える