2013-03-04 47 views
0

我的XAML是:畫布上的圖像 - 不同的尺寸繪製控件的

<Grid Name="grid"> 
      <Viewbox Name="viewBox" Grid.Column="0" Grid.Row="0"> 
       <Grid> 
        <Image Name="image" /> 
        <Canvas Name="canvas" /> 
       </Grid> 
      </Viewbox> 
     </Grid> 

正如你可以看到我有格子帆布和圖像控制來進行繪製了圖像。

,我是裝的所有圖像具有相同的DPI - 72

當圖像裝載我取一些數據,並進行繪圖:

var ellipse = new Ellipse 
       { 
        Width = 100, 
        Height = 100, 
        Cursor = Cursors.Hand, 
        Fill = new SolidColorBrush(Colors.Green), 
        Stroke = new SolidColorBrush(Colors.Black), 
        StrokeThickness = 1 
       }; 
      canvas.Children.Add(ellipse); 
      Canvas.SetLeft(ellipse, 10); 
      Canvas.SetTop(ellipse, 10); 

但看來,橢圓另眼相看不同圖片。它的大小取決於加載圖像的大小。如果加載的圖像具有較大的分辨率 - 橢圓很小。如果加載的圖像分辨率較小 - 橢圓太大。

如何繪製具有相同物理尺寸的橢圓?

我試圖在橢圓控制上應用SnapsToDevicePixels屬性,但它對我沒有用。

回答

0

您的代碼的問題是,圖像控件,因此內部網格總是獲取加載圖像的大小。然後,視圖框將所有內容都縮放到外部網格(單元格)中。顯然,這也可以通過相同的縮放因子來縮放畫布及其子元素。因此,當加載不同大小的圖像時,您會觀察到不同大小的橢圓。

解決方案是不使用Viewbox。 Image控件已經縮放顯示的圖像,除非您將其Stretch屬性設置爲None。因此你根本不需要一個Viewbox。您應該通過設置其Width或其Height或兩者都可以給圖像控件適當的大小。

<Grid> 
    <Image Name="image" Width="120" /> 
    <Canvas Name="canvas" /> 
</Grid>