50536


私はWPFでノード同士を繋げる簡単なツールを作成しています  
以下はそのノードの一つです

[![生成直後のIfNode
正しい状態](https://i.stack.imgur.com/WBpYw.png)](https://i.stack.imgur.com/WBpYw.png)

NodeのViewは全要素内の最大横幅と合計縦幅にリサイズされて欲しいと考え  
ノードの要素を格納するStackPanelのActualWidth/HeightをBindingしました

[code]

    <Rectangle
        x:Name="nodeOutSideRect"
        Width="{Binding ActualWidth, ElementName=nodeElementStackPanel}"
        Height="{Binding ActualHeight, ElementName=nodeElementStackPanel}"/>
    <StackPanel x:Name="nodeElementStackPanel">
        <!--ノードの中身-->
    </StackPanel>
    
[/code]

このノードがグリッドの範囲外へ出ようとすると以下のように勝手にリサイズされてしまいます  
[![範囲外移動時のIfNode
ダメ](https://i.stack.imgur.com/dZ269.png)](https://i.stack.imgur.com/dZ269.png)

ActualWidth/Heightのバインドをしたまま（もしくは上記条件の縦横幅を設定出来る機構）  
上記の自動リサイズを回避する手段をご存知の方が居ましたらご教授頂ければ幸いです


CC BY-SA 4.0
2018-11-18T14:21:43.703
50418
2018-11-22T08:11:05.280
31042
question
c# wpf
コントロールが範囲外に出ようとすると勝手にリサイズされる


`Canvas` を使用するのはいかがでしょうか

[code]

    <Window
        // 省略
        Height="500" Width="500">
    
    <Grid>
        <Canvas Margin="400,50,0,0">
            <Rectangle x:Name="nodeOutSideRect"
                       Width="{Binding ActualWidth, ElementName=nodeElementStackPanel}"
                       Height="{Binding ActualHeight, ElementName=nodeElementStackPanel}"
                       Stroke="Gray" StrokeThickness="2" RadiusX="30" RadiusY="30"/>
            <StackPanel x:Name="nodeElementStackPanel">
                <Button Width="100" Height="100" Margin="30"/>
            </StackPanel>
        </Canvas>
    </Grid>
    
    </Window>
    
[/code]

もしくは、さらに上位(コントロールを自由に配置するエリア)に `Canvas`
を使用することでActualWidth/HeightのBindingも不要になります。こちらのほうがお薦めです。

[code]

    <Window
        // 省略
        Height="500" Width="500">
    
    <Canvas>
        <Grid Canvas.Left="400" Canvas.Top="50">
            <Rectangle x:Name="nodeOutSideRect"
                       Stroke="Gray" StrokeThickness="2" RadiusX="30" RadiusY="30"/>
            <StackPanel x:Name="nodeElementStackPanel" Margin="30">
                <Button Width="100" Height="100"/>
            </StackPanel>
        </Grid>
    </Canvas>
    
    </Window>
    
[/code]


CC BY-SA 4.0
2018-11-22T08:11:05.280
50536
2018-11-22T08:11:05.280
14817
50418
answer