2013-12-19 2 views
2

lamp xamlI'm используя структуру ниже много раз в DataTemplates, чтобы загорать маленькие лампы.Могу ли я сделать Xaml один вкладыш?

Могу ли я поместить его в ContentPresenter или DataTemplate или что-нибудь подобное, чтобы уменьшить код до одной строки?

Значение «test» жестко запрограммировано в xaml для каждой лампы. Я получаю значение привязки с строкой словаря «<», «Сигнал»> «Сигналы».

Я не могу использовать MultiBinding с конвертером, так как он использует столько строк. Любые идеи сделать это одним вкладышем в xaml?

<StackPanel ToolTip="{Binding Signals[test].tooltip}"> 
    <ContentPresenter Content="{Binding Signals[test].lampvalue}" ContentTemplate="{StaticResource GreenLampPresenter}" /> 
    <TextBlock Text="test"/> 
</StackPanel> 

Было бы идеально, если бы приведенный ниже пример был фактически юридическим утверждением в xaml. Я все еще хочу как сигнал от моего словаря и жёстко прописанные значение:

Content="{Binding Path=Signals[test], StringFormat='{0} test'}". 

Дело в том, что у меня есть более чем 100 ламп, как в маленьком изображении. И состояние лампы сохраняется в словаре. Если лампа не найдена в словаре, это означает, что она не подключена в конфигурации (или в физическом контроллере). Ему все еще нужен маленький текст I0, чтобы идентифицировать его. Green Lamp Если у меня нет значения параметра «IO», записанного в режиме «галочка», чтобы назвать лампу, отобразится только зеленый индикатор. И в физическом контроллере всегда присутствует значение «IO».

Поэтому, пожалуйста, предложить верное решение, содержащее оба значения: Сигнал [тест] и «тест» в одной строке :-)

+0

Если вы в буквальном смысле просто пытаются уплотнить две вещи, 'Content =" {Binding Path = Сигналы [тест] .lampvalue, StringFormat = '{0} test'} "' как комментарий вместо ответа, потому что у меня нет кофе еще и не было уверен. –

+0

Я отредактировал мой вопрос, чтобы более подробно описать мою проблему. – bitestar

+0

Умм, это «законное» утверждение в xaml. –

ответ

1

Я не проверял, но я думаю, что он должен работать.

DataTemplate:

<DataTemplate x:Key="greenLampTemplate"> 
    <StackPanel ToolTip="{Binding tooltip}"> 
    <ContentPresenter Content="{Binding lampvalue}" ContentTemplate="{StaticResource GreenLampPresenter}" /> 
    <TextBlock Text="test"/> 
    </StackPanel> 
</DataTemplate> 

Использование DataTemplate:

<ContentPresenter Content="{Binding Signals[test]}" 
        ContentTemplate="{StaticResource greenLampTemplate}"/> 
+0

Если бы я не был достаточно точным: вам нужно поставить твердое значение «тест» в одну строку! – bitestar

+0

То есть в DataTemplate у него здесь. – Josh

+0

@bitestar Я изменил шаблоны – Jehof

Смежные вопросы