2008-12-12 56 views
1

我的目标是制作一个具有两个内容值的按钮。如何制作具有多个内容值的按钮?

想象一下Scrabble瓷砖作为一个按钮:它的中心有一个大字母,右下方有一个小字母。这是我要去的效果。

我做了一个按钮,它有两个ContentPresenter对象,并且我给每个ContentPresenter一个不同的样式。但是,我还没有找到给每个演示者一个单独的值的方法(即,如果我将按钮的内容设置为“X”,则两个ContentPresenter都显示“X”,尽管样式不同)。

我该如何实现我的目标?我猜我的做法是完全错误的......

回答

2

巴...我想我知道现在要做什么。我应该让自己的控制,而不是修改一个按钮。如果我在WinForms中工作,这对我来说是显而易见的,但由于某种原因,所有这些Xaml都让我变得愚蠢。

1

看一看扩展器样品的ControlTemplate在http://msdn.microsoft.com/en-us/library/ms753296.aspx

扩展是HeaderedContentControl的一个子类,它有两个“内容”:报头和内容

控制模板具有两个ContentPresenter元件时,ContentPresenter那未绑定到默认内容属性被定义为:

< ContentPresenter ContentSource = “部首”/ >

如果您需要使用按钮,并且不想为第二个内容添加其他属性,则可以使用附加属性,并将数据绑定到第二个ContentPresnter内容属性。

0

我使用多个'内容槽'创建UserControl延迟here - 它比从HeaderedControl派生的更好,因为您不受插槽数量的限制。

使用范例:

<Window x:Class="TkMVVMContainersSample.Services.TaskEditDialog.ItemEditView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:Common="clr-namespace:TkMVVMContainersSample.Views.Common" 
    Title="ItemEditView" 
    > 
    <Common:DialogControl> 
     <Common:DialogControl.Heading> 
      <!-- Heading string goes here --> 
     </Common:DialogControl.Heading> 
     <Common:DialogControl.Control> 
      <!-- Concrete dialog's content goes here --> 
     </Common:DialogControl.Control> 
     <Common:DialogControl.Buttons> 
      <!-- Concrete dialog's buttons go here --> 
     </Common:DialogControl.Buttons> 
    </Common:DialogControl> 

</Window>