WPF保持完美矩形形状的控制(装订宽度和高度)
目前,我正在努力使一个控件在WPF中显示为长方体形状,而无需生成代码。下面是一个我希望它看起来像什么的工作示例:WPF保持完美矩形形状的控制(装订宽度和高度),wpf,binding,shape,Wpf,Binding,Shape,目前,我正在努力使一个控件在WPF中显示为长方体形状,而无需生成代码。下面是一个我希望它看起来像什么的工作示例: <Grid> <Grid.RowDefinitions> <RowDefinition Height="120"/> <RowDefinition Height="3" /> <RowDefinition Height="*" /> </Grid.RowDefin
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="120"/>
<RowDefinition Height="3" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal">
<Button Margin="6" VerticalAlignment="Stretch" Width="{Binding Path=ActualHeight, Mode=OneWay, RelativeSource={RelativeSource Self}}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Image Source="http://blog.joeclarmusic.com/images/rss-icon.jpg" />
<TextBlock Foreground="Black" TextAlignment="Center" Grid.Row="1" FontSize="11" Text="{Binding Path=Name}" Margin="0, 5, 0, 0" HorizontalAlignment="Center" TextWrapping="Wrap" />
</Grid>
</Button>
</StackPanel>
<GridSplitter Grid.Row="1" Background="#DDDDDD" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" />
</Grid>
好的,这一切都很酷。在我当前的设计中,我使用ItemsControl并显示图像列表。由于这样的列表可能超过窗口的宽度,所以我想在StackPanel周围添加ScrollViewer,其中垂直滚动条被禁用(因为我只希望它从左到右流动,所以我只需要水平滚动条)
添加ScrollViewer后:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="120"/>
<RowDefinition Height="3" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ScrollViewer>
<StackPanel Orientation="Horizontal">
<Button Margin="6" VerticalAlignment="Stretch" Width="{Binding Path=ActualHeight, Mode=OneWay, RelativeSource={RelativeSource Self}}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Image Source="http://blog.joeclarmusic.com/images/rss-icon.jpg" />
<TextBlock Foreground="Black" TextAlignment="Center" Grid.Row="1" FontSize="11" Text="{Binding Path=Name}" Margin="0, 5, 0, 0" HorizontalAlignment="Center" TextWrapping="Wrap" />
</Grid>
</Button>
</StackPanel>
</ScrollViewer>
<GridSplitter Grid.Row="1" Background="#DDDDDD" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" />
</Grid>
在我的计算机中以kaxaml 1.7.1运行时的上图:jonatan.nilsson.is/wpf_with_scrollviewer.jpg
如果您在Kaxaml(或WPF窗口/页面)中运行它,您的。我所做的唯一更改是在StackPanel周围添加ScrollViewer。其他一切都是一样的,为什么它在scrollviewer中不断变大呢
我做错了什么
编辑:
添加了第二个示例的结果图像。编辑:
好的,我已经稍微修改了你的代码,我可以确认这个按钮确实是无限大的。我真的说不出为什么会这样。可能是一些内部测量被破坏了。我确实发现,使用任何面板控件作为按钮内容(本例中为网格)都会导致问题,StackPanel或DockPanel等也是如此。也许您最好不要将这些项放在按钮中,而是使用其他控件。它真的需要一个按钮吗
旧的:按钮的高度不断变大,可能是因为网格单元本身不断变大。如果使用栅格拆分器调整栅格组件的大小,则按钮将假定其所在单元的整个高度。如果你解释一下它“不断变大”的情况,想想看,如果这是驻留在items控件中的东西,那么首先为什么要使用网格拆分器和空单元格呢 老的:
“现在会溢出高度继续变大”我想你指的是按钮的宽度和高度。这是因为宽度与高度成正比
如果您的意思是“不会溢出…”,那么这完全是另一个故事,与网格行的大小有关。也许您应该澄清您的实际问题是什么,并提供一些有效的XAML作为示例。(您文章中的XAML在按钮内容中缺少“”标记。好的,我找到了解决方案。如果满足以下条件,则会发生此“行为”:
- 按钮的内容包含一个图像
- 宽度/高度对其高度/宽度具有约束力
- 按钮内容高于其宽度(当绑定设置为高度->宽度时)
Margin=“0,0,0,1”
添加到图像中,则会出现与之前相同的行为(即,它无限增长)
发生的事情基本上是这样的:
Margin="30 ,0"
形象化将解决it永无止境增长的问题
我不确定我是否解释得很好,因此如果您有可能改进此解释的建议,请发表评论。抱歉,按钮中显然缺少了内容。我修复了代码,希望修复了问题的描述。抱歉,修复的XAML仍然没有指出您正在尝试做什么。从我的角度来看,一切都是错误的hing很好。在ScrollViewer中有一个带有图像的按钮。它都在一个“盒子”形状中。当我在计算机中运行它时(在kaxaml 1.7.1中),该按钮比ScrollViewer大得多。这是第一个没有ScrollViewer的示例的图像(我希望结果是什么样子):这是我在StackPanel周围添加ScrollViewer时计算机上的图像(第二个示例):注意,控件变得无限大。我必须添加MaxWidth=“1000”只是为了阻止它无限增长。是的,除非有另一个控件提供单击支持,否则它必须是一个按钮。我可以将Button height属性绑定到ScrollViewer.ActualHeight,这样可以防止控件无限增长。但是,如果我从按钮中删除Panel控件,并将图像保留为but在内容上,即使这样,它也不能100%工作。当高度改变时,按钮只会增长而不会收缩。如果向下移动GridSplitter,按钮会增长。如果向上移动GridSplitter,按钮将保持其当前大小,而不会相应收缩。这是一个奇怪的b