组合框样式显示评级和描述WPF

时间:2010-01-13 01:38:57

标签: c# wpf mvvm styles

我对WPF中的样式不太满意,所以我想我会在这里询问是否有人可以提供帮助。

我有一个组合框,它绑定到具有评级和描述的视图模型,当我将鼠标悬停在项目上时,项目会更改以显示该项目的评级和描述。

这样可行但是因为有些描述真的很大而且没有包装它只是看起来很难看。

我不知道这是否可能,但我所追求的是一方的评级列表和另一方面的描述框,但我只希望描述框显示当前突出显示的一个。

这样的事情:

alt text http://img94.imageshack.us/img94/6787/comboidea.png

任何人都可以帮助我,或者至少指出我正确的方向开始。

谢谢, 森

3 个答案:

答案 0 :(得分:0)

您可以编辑数据模板的副本(互联网将告诉您如何使用Blend轻松完成此操作)。在该数据模板中,向右添加一个区域。

它可以是另一个面板,您可以将网格向右扩展,或添加水平扩展器......但是您想要这样做。

然后你可以添加两个绑定到你添加到右边的任何东西。一个绑定将用于您要显示的描述(将其绑定到某个文本框)。第二个是新面板的可见性。将其设置为在描述太长时将其折叠。

我会更具描述性,但我猜这就是你真正需要的。

答案 1 :(得分:0)

您是否有理由不想使用工具提示?

修改

我刚才意识到你真正要求的是什么。您想要某种方式来显示作为ComboBox's列表中当前选择的项目的属性。

您不能使用ComboBox这样做,因为当用户浏览下拉列表时,它公开的SelectedItem属性不会更改,只会在用户进行选择。

但是如果你编辑ComboBox的控件模板(这里Blend很有用),你就可以访问下拉列表的ItemsControl本身(我忘了ItemsControl SelectedItem 1}},我暂时没有看过模板。并且您将能够访问 UserControl属性。

实际上值得根据ComboBox构建CurrentItem,为其添加ItemsControl依赖项属性,并将其绑定到SelectedItem的{​​{1}} ComboBox 1}}属性。执行此操作后,您的ComboBox看起来就像普通的CurrentItem,除了它公开了{{1}}属性,您可以绑定另一个控件。

P.S。我实际上并没有做过这个特别的事情,所以我不知道你在尝试时会遇到什么样的问题。

答案 2 :(得分:0)

使用DataTemplate完全重新定义该行:

    <DataTemplate x:Key="superRow" >
        <StackPanel Orientation="Horizontal">
            <StackPanel.Resources>
                <Style TargetType="{x:Type TextBlock}">
                    <Setter Property="Margin" Value="5,2,0,0"/>
                </Style>
            </StackPanel.Resources>
            <TextBlock Text="{Binding Path=Rating}"/>
            <TextBlock Text="{Binding Path=RatingDescription}"/>
        </StackPanel>
    </DataTemplate>

然后在组合框中:

 <ComboBox ItemTemplate="{StaticResource superRow}" />

(为简单起见,错过了其他所需的comboBox选项)