小编Ala*_*lan的帖子

如何自动缩放一组控件的字体大小?

我在网格中的WPF中有一些TextBlocks,我想根据它们的可用宽度/高度进行缩放.当我搜索自动缩放字体大小时,典型的建议是将TextBlock放入ViewBox.

所以我这样做了:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <Viewbox MaxHeight="18" Grid.Column="0" Stretch="Uniform" Margin="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        <TextBlock Text="{Binding Text1}" />
    </Viewbox>

    <Viewbox MaxHeight="18" Grid.Column="1" Stretch="Uniform" Margin="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        <TextBlock Text="{Binding Text2}" />
    </Viewbox>

    <Viewbox MaxHeight="18" Grid.Column="2" Stretch="Uniform" Margin="5" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        <TextBlock Text="{Binding Text3}" />
    </Viewbox>
</Grid>
Run Code Online (Sandbox Code Playgroud)

它会自动缩放每个TextBlock的字体.但是,这看起来很有趣,因为如果其中一个TextBlocks具有较长的文本,那么它将使用较小的字体,而它的相邻网格元素将使用较大的字体.我希望字体大小按组扩展,如果我可以为一组控件指定"SharedSizeGroup"以自动调整其字体大小,那也许会很好.

例如

第一个文本块文本可能是"3/26/2013 10:45:30 AM",第二个TextBlocks文本可能是"FileName.ext".如果它们跨越窗口的宽度,则用户开始调整窗口的大小越来越小.日期将开始使其字体小于文件名,具体取决于文件名的长度.

理想情况下,一旦其中一个文本字段开始调整字体磅值大小,它们就会匹配.有没有人想出一个解决方案,或者可以让我了解你如何使它工作?如果它需要自定义代码,那么希望我们/我可以将其重新打包为自定义混合或附加行为,以便将来可以重复使用.我认为这是一个相当普遍的问题,但我无法通过搜索找到任何内容.


更新 我尝试了Mathieu的建议,但它有一些副作用:

<Window x:Class="WpfApplication6.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="270" Width="522">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>

        <Rectangle Grid.Row="0" Fill="SkyBlue" />

        <Viewbox Grid.Row="1" …
Run Code Online (Sandbox Code Playgroud)

wpf font-size mvvm

46
推荐指数
2
解决办法
6万
查看次数

当Array.BinarySearch表示具有负索引的数组时,它意味着什么?

Array.BinarySearch.NET中的文档说它不适用于具有负索引的数组.据我所知,.NET只有具有正索引的数组,并且不允许继承该System.Array类型.

为什么文档说明了这一点以及它是如何实现的?

此方法不支持搜索包含负索引的数组.必须在调用此方法之前对数组进行排序.

.net c# arrays

4
推荐指数
1
解决办法
122
查看次数

DataTemplate用MVVM生成Menu

我正在尝试使用DataTemplate从我的ViewModels创建一个关于MVVM的菜单.基本上,我已经创建了几个类来存储有关我的Menu结构的信息.然后,我想要使用DataTemplate将菜单结构视为WPF菜单.

我有一个菜单服务,允许不同的组件在菜单中注册新的菜单和项目.这是我如何组织我的菜单信息(ViewModel)

我有以下类:MainMenuViewModel - 包含TopLevelMenuViewModelCollection(顶级菜单的集合)

TopLevelMenuViewModel - 包含MenuItemGroupViewModelCollection(菜单项组的集合),以及菜单"Text"的名称

MenuItemGroupViewModel - 包含MenuItemViewModelCollection(菜单项的集合)

MenuItemViewModel - 包含text,image uri,command,children MenuItemViewModels

我想要做的是将DataTemplate应用于以前的类,将它们转换为普通的菜单.

MainMenuViewModel - >菜单

TopLevelMenuViewModel - >带有标题集的MenuItems

MenuItemGroupViewModel - > Separator,后跟每个MenuItemViewModel的MenuItem

MenuItemViewModel - > MenuItem(HeirarchicalDataTemplate)

问题是我没有看到如何为MenuItemGroupViewModel生成多个MenuItem.Menu模板希望始终为每个项目创建一个ItemContainer,它是一个MenuItem.因此,我要么最终在MenuItem中使用我的MenuItems,这显然不起作用,或者根本不起作用.我已经尝试了几件事,仍然无法弄清楚如何让一个项目产生多个MenuItem.

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:local="clr-namespace:--">
<!-- These data templates provide the views for the menu -->

<!-- MenuItemGroupView -->
<Style x:Key="MenuItemGroupStyle" TargetType="{x:Type MenuItem}">
    <Setter Property="Header" Value="qqq" />
    <!-- Now what? I don't want 1 item here..
    I wanted this to start with a <separator /> and list the …
Run Code Online (Sandbox Code Playgroud)

wpf wpf-controls prism-4

3
推荐指数
1
解决办法
7558
查看次数

我的URI必须如此长而明确吗?

我正在使用Microsoft Prism和Unity 编写模块化应用程序.我的应用程序的Shell项目加载各种DLL,这些DLL都包含自己的/ resources或/ images文件夹和用户界面视图.因此,每个模块都是DLL.

当我尝试在我的应用程序中使用资源时,似乎我必须非常清楚它的位置以使其工作.例如,要在同一模块/ dll中定位图像:

<Image Source="pack://application:,,,/MyCompany.MyProduct.MyModule;Component/Images/ZoomIn.gif" />
Run Code Online (Sandbox Code Playgroud)

我是否真的每次都必须使用URI的长格式版本?我尝试过更短的版本,例如:

pack://application:,,,/Images/ZoomIn.gif

Images/ZoomIn.gif

ZoomIn.gif
Run Code Online (Sandbox Code Playgroud)

等等

我想也许第二个版本应该有效.当我看到Uri的例子时,他们经常说"相对于当前的集会".这是正在运行的可执行程序的程序集吗?或者这是代码所属的程序集(我的库/模块)?

更新:

在Peter Hansen的帮助下,我能够将其缩短为:

<Image Source="../Images/ZoomOut.png" />
Run Code Online (Sandbox Code Playgroud)

显然我不得不使用../因为我的视图是在子文件夹中.我也可以放弃pack://语法,因为类型转换器为我做了这个.

wpf prism unity-container mvvm

2
推荐指数
1
解决办法
245
查看次数

标签 统计

wpf ×3

mvvm ×2

.net ×1

arrays ×1

c# ×1

font-size ×1

prism ×1

prism-4 ×1

unity-container ×1

wpf-controls ×1