Silverlife

c303@WANKUMA

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

書庫

日記カテゴリ

前回、コメントで中博俊さんからアドバイスを頂いたのですが、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と同等のクラスでも用意して、動作を目的に合
わせるとかした方がよいとおもうのですが、自分のスキルのなさと、あ
とぶっちゃけ先に進みたいので、そのあたりは後回しにしたいとおもい
ます(爆

投稿日時 : 2008年6月29日 9:08

コメント

# re: 自作DockPanelが倒せない 2008/06/30 0:20 かずき
勉強のためのDockPanelだったら余計なお世話になってしまうんですけが、Gridを使うことでDockPanelと同じレイアウトができますよ~

# [C#][Silverlight]Silverlight2にはDockPanelって無いのね 2008/06/30 0:35 かずきのBlog
[C#][Silverlight]Silverlight2にはDockPanelって無いのね

# re: 自作DockPanelが倒せない 2008/07/01 23:32 c303
なかなか時間がとれなくて返答おそおそですね;

DockPanelないんです;
WPFの経験があると、どうしてもパネルの入れ子が増えるような書き方
は(速度的に)使えなくなりますので、縦横詰めで表示できるこの
コントロールは自分は割と重宝しています。

是非とも次のバージョンでは出して頂きたい!
とりあえず、いまは仮につくっておいて、あとから据置きっ、とか考え
てます。

Post Feedback

タイトル
名前
Url:
コメント