咨询一个WPF的三列布局问题

Jeremiah 2015-01-28 09:56:24
现在有两个Canvas, 一个Expander, 在三列上.



第一个图: Canvas A, Canvas B 和Expander都是展开的情况.
第二个图: Canvas A, Canvas B 平均分配屏幕空间, Expander收起来了.
第三个图: Canvas A不变, Canvas B的 Visibility变成了Collapse了的情况.
第四个图: Canvas A不变, Canvas B的 Visibility变成了Collapse, Expander收起来了.

求这个布局及交互的思路, 如果单纯通过布局实现不了, 简单的代码也可以.
我尝试过使用Grid三列, 列宽Auto., 可是Canvas 总是穿越过 Expander, 无论是Expander是展开的状态还是收缩的状态.

非常感谢.
...全文
236 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanymy 2015-01-30
  • 打赏
  • 举报
回复
* 赋值 第一次加载就已经内部 固定赋值了 要么你加触发器试试 要么 你找页面刷新 刷新 * 值 (理论上) 如果想治百病 自己写vm控制器
subMain 2015-01-29
  • 打赏
  • 举报
回复
引用 楼主 w59879213 的回复:
现在有两个Canvas, 一个Expander, 在三列上. 第一个图: Canvas A, Canvas B 和Expander都是展开的情况. 第二个图: Canvas A, Canvas B 平均分配屏幕空间, Expander收起来了. 第三个图: Canvas A不变, Canvas B的 Visibility变成了Collapse了的情况. 第四个图: Canvas A不变, Canvas B的 Visibility变成了Collapse, Expander收起来了. 求这个布局及交互的思路, 如果单纯通过布局实现不了, 简单的代码也可以. 我尝试过使用Grid三列, 列宽Auto., 可是Canvas 总是穿越过 Expander, 无论是Expander是展开的状态还是收缩的状态. 非常感谢.
这样行不? <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"> <ColumnDefinition Width="*"> <ColumnDefinition Width="Auto"> </Grid.ColumnDefinitions> <Canvas Grid.Column="0" ... /> <Canvas Grid.Column="1" ... /> <Expander Grid.Column="2" ... /> </Grid>
Jeremiah 2015-01-29
  • 打赏
  • 举报
回复
引用 6 楼 lanymy 的回复:
你这个有一个问题, 就是当Blue的Visibility为Collpased的时候, 红色宽度还是不变的.
  • 打赏
  • 举报
回复
Canvas 设置固定的宽高了? 不要设置固定的宽高,让它的水平与垂直 设置为拉伸。试试
lanymy 2015-01-29
  • 打赏
  • 举报
回复
lanymy 2015-01-29
  • 打赏
  • 举报
回复
宽度不要设置到 Expander 元素上 设置在子空间上
lanymy 2015-01-29
  • 打赏
  • 举报
回复






<Grid>

<DockPanel LastChildFill="True">

<Expander Name="myExpander"
Background="Tan"
HorizontalAlignment="Right"
Header="My Expander"
ExpandDirection="Left"
IsExpanded="False"
DockPanel.Dock="Right">
<TextBlock TextWrapping="Wrap">
Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor incididunt ut
labore et dolore magna aliqua
</TextBlock>
</Expander>

<Grid DockPanel.Dock="Left">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0"
Background="Red"></Grid>
<Grid Grid.Column="1"
Background="Blue"></Grid>
</Grid>
</DockPanel>

</Grid>

Jeremiah 2015-01-29
  • 打赏
  • 举报
回复
引用 2 楼 subMain 的回复:
[quote=引用 楼主 w59879213 的回复:] 现在有两个Canvas, 一个Expander, 在三列上. 第一个图: Canvas A, Canvas B 和Expander都是展开的情况. 第二个图: Canvas A, Canvas B 平均分配屏幕空间, Expander收起来了. 第三个图: Canvas A不变, Canvas B的 Visibility变成了Collapse了的情况. 第四个图: Canvas A不变, Canvas B的 Visibility变成了Collapse, Expander收起来了. 求这个布局及交互的思路, 如果单纯通过布局实现不了, 简单的代码也可以. 我尝试过使用Grid三列, 列宽Auto., 可是Canvas 总是穿越过 Expander, 无论是Expander是展开的状态还是收缩的状态. 非常感谢.
这样行不? <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"> <ColumnDefinition Width="*"> <ColumnDefinition Width="Auto"> </Grid.ColumnDefinitions> <Canvas Grid.Column="0" ... /> <Canvas Grid.Column="1" ... /> <Expander Grid.Column="2" ... /> </Grid> [/quote] 试过了, 不行的. Canvas 总是穿过Expander, 好像必需要设置Canvas的值.

8,756

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧