Как сделать кнопку с несколькими значениями содержимого? - PullRequest
1 голос
/ 12 декабря 2008

Моя цель - создать кнопку с двумя значениями содержимого.

Представьте плитку «Эрудит» как кнопку: она имеет большую букву в центре и маленькую цифру в правом нижнем углу. Это тот эффект, которого я добиваюсь.

Я сделал кнопку, в которой есть два объекта ContentPresenter, и я назначил каждому из ContentPresenter свой стиль. Однако я не нашел способа присвоить каждому докладчику отдельное значение (т. Е. Если я установлю для Content кнопки значение «X», тогда оба ContentPresenters отобразят «X», хотя и в разных стилях).

Как мне достичь своей цели? Я предполагаю, что мой подход совершенно неправильный ....

Ответы [ 3 ]

2 голосов
/ 12 декабря 2008

Бах ... Думаю, я знаю, что теперь делать. Я должен сделать свой собственный контроль, а не изменять кнопку. Для меня это было бы очевидно, если бы я работал в WinForms, но по какой-то причине весь этот Xaml делает меня глупым.

1 голос
/ 14 декабря 2008

Взгляните на образец ControlTemplate Expander в http://msdn.microsoft.com/en-us/library/ms753296.aspx

Expander является подклассом HeaderedContentControl, он имеет два «содержимого»: заголовок и содержимое

Шаблон элемента управления имеет два элемента ContentPresenter, ContentPresenter, который не связан со свойством содержимого по умолчанию, определяется как:

Если вам нужно использовать кнопку, и вы не хотите добавлять другое свойство для второго содержимого, вы можете использовать присоединенное свойство, а данные привязывают к нему второе свойство ContentPresnter.

0 голосов
/ 23 июня 2009

Я остановился на создании UserControl с несколькими «слотами контента» здесь - это лучше, чем наследование от 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>
...