0

私はこの定義を持っています、この DrawingImage はこの RectangleGeometry プロパティを持っています: Rect="0,0,108,208"

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

    <Grid Grid.Row="0" Grid.Column="0">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="20"></RowDefinition>
        </Grid.RowDefinitions>
        <StackPanel x:Name="ImageDetractor" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Bottom">
            <Image Stretch="None" HorizontalAlignment="Center" Name="Detractor" Width="Auto" Height="Auto" VerticalAlignment="Top">
                <Image.Source>
                    <DrawingImage PresentationOptions:Freeze="True" x:Name="DrawDetractor">
                        <DrawingImage.Drawing>

                            <DrawingGroup xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
                                <DrawingGroup x:Name="DrawingLayer">
                                    <DrawingGroup.ClipGeometry>
                                        <RectangleGeometry Rect="0,0,108,208" />
                                    </DrawingGroup.ClipGeometry>
                                    <GeometryDrawing Brush="#FFFFFFFE">
                                        <GeometryDrawing.Geometry>
                                            <PathGeometry FillRule="Nonzero" Figures="M0,0L108,0 108,208 0,208 0,0z" />
                                        </GeometryDrawing.Geometry>
                                    </GeometryDrawing>
                                    <GeometryDrawing Brush="#FFF29C44">
                                        <GeometryDrawing.Geometry>
                                            <PathGeometry FillRule="Nonzero" Figures="M40.72,20.51C42.58,14.38 48.61,9.88 55,9.73 62.36,9.21 69.56,14.68 70.99,21.91 72.26,28.09 70.08,34.48 66.67,39.61 65.47,41.1 65.82,43.06 65.83,44.82 70.87,44.74 75.92,44.62 80.96,44.8 84.91,44.92 88.95,47.28 90.31,51.11 92.71,58.3 94.47,65.7 96.8,72.92 98.19,77.58 99.53,83.12 96.52,87.45 93.1,92.04 86.96,93.03 81.59,92.77 81.55,126.19 81.57,159.61 81.58,193.03 82,198.23 77.16,203.07 71.97,202.76 67.76,202.58 62.84,203.71 59.37,200.63 55.29,197.78 55.91,192.3 55.66,187.95 55.59,168.46 55.85,148.95 55.52,129.46 55.08,148.3 55.5,167.16 55.32,186.01 55.08,189.8 56.44,193.91 54.54,197.43 52.89,201 48.91,203.16 45.02,202.77 41.33,202.54 37.05,203.61 33.92,201.12 31.34,199.29 29.5,196.32 29.67,193.08 29.69,159.65 29.59,126.22 29.72,92.79 25.34,93.78 20.3,94.35 16.42,91.57 12.61,89.04 11.38,83.98 12.69,79.74 15.29,70.59 17.88,61.43 20.55,52.3 21.62,48.07 25.66,45.11 29.94,44.84 35.14,44.53 40.36,44.9 45.56,44.67 45.53,43.7 45.47,41.75 45.44,40.77 41.03,35.11 39.01,27.55 40.72,20.51z" />
                                        </GeometryDrawing.Geometry>
                                    </GeometryDrawing>
                                    <GeometryDrawing Brush="#FFFFFFFE">
                                        <GeometryDrawing.Geometry>
                                            <PathGeometry FillRule="Nonzero" Figures="M43.66,21.44C45.29,15.4 51.94,11.56 58.01,12.84 63.43,13.69 67.68,18.56 68.17,23.97 68.63,29.75 66.25,35.41 62.74,39.9 62.72,42.39 62.71,44.89 62.69,47.38 69.11,48.27 75.61,47.32 82.05,47.87 84.83,48.22 87.14,50.44 87.77,53.15 89.9,60.28 91.92,67.45 94.04,74.59 95.09,78.4 96.15,83.03 93.48,86.44 90.57,89.61 85.97,89.94 81.94,89.85 68.16,89.69 54.36,90.08 40.58,89.65 42.57,87.48 45.76,87.37 48.35,86.3 56.84,83.23 65.69,81.03 73.84,77.09 75.95,76.78 78.99,77.4 78.43,74.18 76.96,74.13 75.5,74.09 74.04,74.04 73.36,70.9 71.98,67.51 68.71,66.34 63.23,64.53 57.32,65.85 51.82,66.94 45.66,68.57 39.38,69.77 33.28,71.6 33.59,72.15 34.22,73.23 34.54,73.78 45.06,72.54 55.14,67.43 65.91,68.53 69.05,68.84 70.88,71.91 70.87,74.85 69.97,76.04 68.4,76.39 67.09,76.96 54.08,81.36 41.04,85.68 28.03,90.05 24.34,91.21 19.64,91.19 16.94,88.03 14.69,85.56 15.19,81.93 16.06,79 18.64,70.38 21,61.71 23.54,53.08 24.23,50.14 26.93,47.98 29.92,47.82 36.14,47.4 42.4,48.21 48.6,47.39 48.58,44.91 48.58,42.43 48.57,39.95 44.59,34.78 42,27.98 43.66,21.44z" />
                                        </GeometryDrawing.Geometry>
                                    </GeometryDrawing>
                                    <GeometryDrawing Brush="#FFFFFFFE">
                                        <GeometryDrawing.Geometry>
                                            <PathGeometry FillRule="Nonzero" Figures="M32.71,91.68C33.82,91.22 34.9,90.68 36.07,90.4 38.33,91.24 40.39,92.87 42.93,92.69 54.77,92.73 66.62,92.7 78.47,92.69 78.55,126.12 78.5,159.55 78.5,192.98 78.78,196.6 75.62,199.86 72.06,199.99 68.57,200.17 64.54,200.7 61.52,198.56 57.94,195.84 59.07,190.85 58.99,186.97 59.02,168.3 58.79,149.63 59.03,130.96 59.4,128.69 57.46,126.14 55.05,126.73 52.95,126.88 52.21,129.24 52.39,131.02 52.4,151.7 52.44,172.38 52.38,193.06 52.5,196.23 50.11,199.28 46.98,199.83 43.99,200.32 40.9,200.31 37.92,199.76 34.91,199.13 32.74,196.11 32.85,193.07 32.69,159.28 32.96,125.47 32.71,91.68z" />
                                        </GeometryDrawing.Geometry>
                                    </GeometryDrawing>
                                </DrawingGroup>
                            </DrawingGroup>

                        </DrawingImage.Drawing>
                    </DrawingImage>
                </Image.Source>
            </Image>
        </StackPanel>
    </Grid>
</Grid>

ウィンドウを最大化/サイズ変更すると、画像は前述のサイズのままですが、画像のサイズを変更する必要があります。これを行うにはどうすればよいですか?

4

1 に答える 1

0

私はこれの良い例を持っています。私の例では、ViewModel を使用してグリッドに描画しており、ウィンドウのサイズが変更されるたびに更新されます。

あなたのxamlでこれを試してください

    <Window x:Class="GraphApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:ViewModel="clr-namespace:GraphApp"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>

    </Window.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="50"></RowDefinition>
            <RowDefinition Height="400*"></RowDefinition>
        </Grid.RowDefinitions>
        <StackPanel Grid.Row="0">
            <Button Width="100" Height="30" Content="update" Command="{Binding Path=UpdateCommand}"></Button>
        </StackPanel>
        <Grid x:Name="GraphGrid" Grid.Row="1"> 
            <ViewModel:BasicGraph x:Name="BasicGraphE" Width="{Binding ElementName=GraphGrid, Path=ActualWidth}"
                                  Height="{Binding ElementName=GraphGrid, Path=ActualHeight}"
                                  ></ViewModel:BasicGraph>
        </Grid>
    </Grid>
</Window>

ビューモデルの場合、このコードを追加します

    namespace GraphApp
{    
    public class BasicGraph:FrameworkElement
    {
    Canvas Graph;
    VisualCollection vc;
    DrawingContext dc;
    double x_center;
    double y_center;

    public BasicGraph()
    {
        vc  = new VisualCollection(this);
        this.Loaded += new RoutedEventHandler(Draw_Loaded);
        this.LayoutUpdated += new EventHandler(Draw_Updated);
    }

    public void UpdateLayout()
    {
        this.UpdateLayout();
    }
    void DrawAxes()
    {
        Point leftMid = new Point(0,this.ActualHeight/2);
        Point rightMid = new Point(this.ActualWidth, this.ActualHeight / 2);
        Point topMid = new Point(this.ActualWidth / 2, 0);
        Point bottomMid = new Point(this.ActualWidth / 2, this.ActualHeight); 
        DrawingVisual dv = new DrawingVisual();
        using (DrawingContext dc = dv.RenderOpen())
        {
            dc.DrawLine(new Pen(Brushes.Black, 1.0), leftMid, rightMid);
            dc.DrawLine(new Pen(Brushes.Black, 1.0), topMid, bottomMid);
        }
        vc.Add(dv);
    }

    void DrawLinePoint(Point p1, Point p2)
    {
        DrawAxes();
    }

    void Draw_Loaded(object sender, RoutedEventArgs args)
    {
        DrawAxes();
        // DrawLinePoint(new Point(1.5, 1.5), new Point(50.0, 50.0));
    }

    void Draw_Updated(object sender, EventArgs args)
    {
        vc.Clear();
        DrawAxes();
    }


    void GenerateAxes(Canvas GraphWindow)
    {
        double width = GraphWindow.Width;
        double height = GraphWindow.Height;            
    }

    protected override Visual GetVisualChild(int index)
    {
        return vc[index];
    }

    protected override int VisualChildrenCount
    {
        get
        {
            return vc.Count;
        }
    }


}
}

フレームワーク要素は基本的に、これが画面に描画されるものであることをコンパイラに伝えます。

Draw_Updated <- ウィンドウのサイズを変更するたびに呼び出されます。これは、描画をクリアして再描画する必要があります。

あなたが疑問に思っている場合に備えて、これらは私の使用ステートメントです

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Forms;
using System.Windows;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Linq.Expressions;
于 2013-11-28T16:54:18.390 に答える