2012-02-14 13 views
1

イメージを表示するカスタムのUserControlがあります。私はこのユーザーコントロール をMainWindowに使用しようとしています。何らかの理由でイメージが内容を埋めることはありません。 そして、私は理由を理解できません。 キャンバス内のキャンバスがWPFの親を埋めるのはなぜですか?

この

は、カスタムユーザーコントロールです:

<UserControl x:Class="BookWriter3D.Sheet" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
      FlowDirection="RightToLeft"> 
<Canvas RenderTransformOrigin="0.0,0.0"> 
    <Canvas.RenderTransform> 
     <RotateTransform x:Name="Angle"/> 
    </Canvas.RenderTransform> 
    <Canvas x:Name="LayoutRoot"> 
     <Canvas.Clip> 
      <RectangleGeometry x:Name="imgRect" Rect="0,0,1500,800"/> 
     </Canvas.Clip> 
     <Image x:Name="sheetImage" Source="C:\Users\Eric\Documents\Papa\BookWriter3D\Resources\Images\Page0.jpg" Stretch="Fill"/> 
     <Image x:Name="shadowSpine" Source="C:\Users\Eric\Documents\Papa\BookWriter3D\Resources\Images\shadowspine.png" Canvas.Left="899" Canvas.Top="0"/> 
     <Image x:Name="curlShadow" Opacity="0.0" Source="C:\Users\Eric\Documents\Papa\BookWriter3D\Resources\Images\curlshadow.png" Canvas.Top="0" Stretch="Fill" 
       RenderTransformOrigin="1.0,0.66"> 
      <Image.RenderTransform> 
       <TransformGroup> 
        <ScaleTransform x:Name="curlShadowScale" ScaleX="1.0" ScaleY="2.0"/> 
        <RotateTransform x:Name="curlShadowRotate" Angle="0"/> 
        <TranslateTransform x:Name="curlShadowTranslate" X="0" Y="0"/> 
       </TransformGroup> 
      </Image.RenderTransform> 
     </Image> 
    </Canvas> 
</Canvas> 

そして、これはMainWindow.xamlです:

   <Canvas x:Name="layoutRoot" Background="White" RenderTransformOrigin=".5,.5"> 
       <Canvas.RenderTransform> 
        <ScaleTransform ScaleX="1.0" ScaleY="1.0"/> 
       </Canvas.RenderTransform> 
        <local:Sheet x:Name="Page1Sheet"></local:Sheet> 
        <Canvas x:Name="traca" > 
        <Canvas x:Name="catrabs" Canvas.Top="0"> 
         <Canvas.Clip > 
          <PathGeometry x:Name="baclpth" > 
           <PathGeometry.Figures > 
            <PathFigure IsClosed="True" x:Name="baclpz" StartPoint="0,0"> 
             <PathFigure.Segments> 
              <LineSegment x:Name="baclzz" Point="400,0"/> 
              <LineSegment x:Name="baclzyy" Point="400,400"/> 
              <LineSegment x:Name="baclzyrq" Point="0,300" /> 
             </PathFigure.Segments> 
            </PathFigure> 
           </PathGeometry.Figures> 
          </PathGeometry> 
         </Canvas.Clip> 

           <local:Sheet x:Name="Page1TraceSheet" X="0" Y="625"/> 
        </Canvas> 

このコードは、私はそれがこの問題上の任意のinfluenseを持って疑うものの、引き続き。

助けが必要ですか?

EDIT: outerWrapper Canvasが画面を塗りつぶしてしまったがLayoutRootが親を埋めることがわかったが、イメージと同じサイズなので、最初は問題が異なる

EDIT 2: 問題を解決しました。 Canvasは内容に応じてサイズを変更しますので、 私は、画像の幅と高さを設定するだけです。完全に機能しました。

+0

どちらの画像ですか?あなたはそれらの3つを持っています! – jv42

+0

申し訳ありませんが、page0.jpgですが、そのすべてが別のものです。コンテナ自体が画面を満たしていない可能性がありますか? –

+1

非常に便利なテクニックは、異なる容器の背景色を半透明で非常に異なったものに設定することです。 – jv42

答えて

0

問題を解決しました。キャンバスは内容に応じてサイズを変更するので、イメージの幅/高さを設定するだけで済み、完全に機能しました。

<Image x:Name="sheetImage" Source="C:\Users\Eric\Documents\Papa\BookWriter3D\Resources\Images\Page0.jpg" Width="1280" Height="800" Stretch="Fill" /> 
3

Canvasは子のサイズを変更しません。画像を自動的に特定の領域に塗りつぶしたい場合は、代わりにグリッドを使用することを検討してください。違いの感覚を得るために、この

<Canvas> 
    <Image Source="C:\Users\Public\Pictures\Sample Pictures\Desert.jpg" /> 
</Canvas> 

対この

<Grid> 
    <Image Source="C:\Users\Public\Pictures\Sample Pictures\Desert.jpg" /> 
</Grid> 

を試してみてください。キャンバス内の画像にImage.Stretchの異なる設定を試してみてください。彼らは無視されます。

0

Canvasは、他のコントロールのサイズや位置を変更したり拘束したりしません。グリッドが必要なのかもしれません。

関連する問題