在WPF列表或网格中调整字体大小以正确使用空格
我有一个应用程序显示体育联赛的联赛表。 这些表格基本上是具有不同列的网格,它们表示每个球队的统计数据,例如比赛进球数,赢球数,失球数,进球得分和进球数等。因此,排名表有一个有趣的属性:对于给定的比赛,我们总是有相同的数量(代表团队)。 由于WPF控件是无形的,我可以直接使用ListBox,ListView,ItemsControl或者DataGrid。 应该不重要。
然而,我想要的东西我还没有实现:给定表的大小(实际上,窗口的大小),所有的团队应该始终可见(不垂直滚动),所有统计列(如用户选择的)应该是可见的,并且字体大小应该反映出来,以便它尽可能大,而不会有任何列变得太大而不适合内容。
我可以轻松使用UniformGrid来实现无垂直滚动的部分。 但是,调整字体大小似乎并不容易。
当然,ViewBox可以让每个表格单元格的内容尽可能大地单独设置大小,但这可能会导致丑陋,因为最终会产生一堆大小不一的单元格。
我不期望得到一个简单的答案,但如果它是可能的,我很乐意听到它。 综上所述:
表格应该随窗口调整大小,而始终显示不带滚动条的所有数据。
字体大小应设置为最大可能的大小,以允许每行的每列显示其所有内容。
所有列的大小应尽可能小,以允许所有内容可见,除了一列使用“* -sizing”来占用剩余空间。
所以..任何聪明的方法来做到这一点? :)
它是否适用于您需要使窗口的子元素成为ViewBox并将其放入其中的所有内容? 我不确定你所做的事情的细节是否会导致这种情况不起作用,但下面是我提出的一个非常简单的例子:
<Window x:Class="ZoomTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1">
<Viewbox>
<StackPanel>
<TextBlock>2</TextBlock>
<TextBlock>Getting longer</TextBlock>
<TextBlock>Here is some really long text...</TextBlock>
</StackPanel>
</Viewbox>
</Window>
整个内容始终可见,并具有最大可能的字体大小。 所有文本均匀地缩放。
你可以用字体大小做这样的事情。 将FontSize设置为使用自定义IValueConverter( {Binding RelativeSource={x:Static RelativeSource.Self}, Converter={StaticResource FontSizeConverter}}
或类似的东西)绑定到TextBox本身的绑定表达式。
在转换器内部,您现在可以引用TextBox,您可以使用它来获取文本内容,控件的大小,父控件(网格)的大小等。您可能可以使用此信息来在飞行中计算它。
如果您需要文本框来做出基于彼此的决定,那么您可以在Convert方法中调用的页面级别进行静态回调,以确定是否仍在调整大小模式并跟踪任何其他信息(已计算的最小或最大字体大小等)。 这是一个复杂的过程,但应该有几种方法可以做到这一点。 您甚至可以首先隐藏所有框中的文本,循环显示所有文本框(最小字体大小),然后以编程方式设置字体大小并将其淡入视图中。
链接地址: http://www.djcxy.com/p/64723.html上一篇: Resizing font in WPF list or grid to use space properly