Silverlife

c303@WANKUMA

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  5  : 記事  0  : コメント  82  : トラックバック  1

書庫

日記カテゴリ

2008年6月29日 #

前回、コメントで中博俊さんからアドバイスを頂いたのですが、Gridを
使用すると問題が発生することが発覚。
もともとアナログ脳なので、最初からCanvasで座標指定することしか頭
になかったために発見が遅れました。

ちなみにGridのほかにStackPanelを使用した場合でも同様の症状がでた
ので、Canvas以外の、回りにサイズを合わせようとする場合すべてに同
じ現象が発生する可能性があるため、少しみていきたいとおもいます。


<UserControl x:Class="SL080624b.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:life="clr-namespace:SL080624b">
    <Grid>
        <life:DockPanel LastChildFill="True">
            <Button life:DockPanel.Dock="Bottom" Content="Hello1"/>
            <Button life:DockPanel.Dock="Left" Content="Hello2"/>
            <Button life:DockPanel.Dock="Top" Content="Hello3"/>
            <Button life:DockPanel.Dock="Right" Content="Hello4"/>
            <Button Content="World"/>
        </life:DockPanel>
    </Grid>
</UserControl>


おそらく、最初のHello1ボタンが、横のサイズが増えた分だけ、縦も同
じ比率でサイズが大きくなっているのではないでしょうか。
あくまで予測の域ですが。
Hello2は縦のサイズを元に同様のことが起き、あとのコントロールは縦
横のサイズが0で見えなくなっているか、描画しようともしていないの
か。


試しにこれと同じソースをWPFで試してみたが、WPFでは考えた通りに
反映されている。
つまり、この挙動の違いはソース自体にはなく、親クラスのPanelか、
さらにその親クラスの動作がWPFと違っている可能性がある。


バグか仕様か、それはわからないところなのですが、次の書き方でごま
k…ゲフンゲフン、回避することができた。
横に自動で合わせるときは縦のサイズを指定する。
縦に自動で合わせるときは横のサイズを指定する。
…正直、使い方としては微妙ですが;
ウィンドウのサイズを変えれば、ちゃんとコントロールのサイズも自動
で変わってくれる。


<UserControl x:Class="SL080624c.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:life="clr-namespace:SL080624c">
    <Grid>
        <life:DockPanel LastChildFill="True">
            <Button Height="20" life:DockPanel.Dock="Bottom" Content="Hello1"/>
            <Button Width="50" life:DockPanel.Dock="Left" Content="Hello2"/>
            <Button Height="20" life:DockPanel.Dock="Top" Content="Hello3"/>
            <Button Width="50" life:DockPanel.Dock="Right" Content="Hello4"/>
            <Button Content="World"/>
        </life:DockPanel>
    </Grid>
</UserControl>

本来なら、ここでPanelと同等のクラスでも用意して、動作を目的に合
わせるとかした方がよいとおもうのですが、自分のスキルのなさと、あ
とぶっちゃけ先に進みたいので、そのあたりは後回しにしたいとおもい
ます(爆

posted @ 9:08 | Feedback (299)