#c# #wpf
#c# #wpf
Вопрос:
У меня есть кнопка с ресурсами:
Content="{x:Static resPath:Resources.ZoomIn}"
какое значение = «Увеличить». Я хочу добавить к этому содержимому «x1». Чтобы получить значение = «Увеличить в x1».
Я хочу сделать что-то вроде этого:
Content="{x:Static resPath:Resources.ZoomIn} x1"
Content="{x:Static resPath:Resources.ZoomIn} {x1}"
Но это выдает ошибку.
Ответ №1:
Используйте текстовый блок в качестве содержимого:
<Button>
<TextBlock>
<Run Text="{x:Static resPath:Resources.ZoomIn}"/>
<Run Text="x1"/>
</TextBlock>
</Button>
или
<Button>
<TextBlock>
<Run Text="{x:Static resPath:Resources.ZoomIn}"/> x1
</TextBlock>
</Button>
Комментарии:
1. Я думаю, что это более чистый способ достижения результата. Мы не знаем полного требования, но я думаю, вы вполне могли бы «увеличивать» разные величины, такие как x1 или x2 или x3. Четное использование значения ползунка. Отдельные прогоны (возможно, 3 с x в другом) позволят вам связать это число.
2. @Andy Я думаю, что это личное предпочтение, но я согласен с тем, что синтаксис разметки более сложный и его труднее читать, я добавил его в качестве альтернативного подхода к тому, что предложил @Clemens. Я просто хочу добавить, что для сценария, который вы описываете, вы могли бы также использовать
StringFormat
вMultiBinding
.3. Одно можно сказать наверняка. На самом деле вам не нужна привязка для достижения желаемого результата. IMO это просто добавляет ненужную сложность, и поэтому его следует избегать.
4. Я бы сказал, что это инженерный принцип выбора самого простого варианта. Решающими факторами являются простота чтения и простота. Но приложение все равно будет работать нормально при любом подходе.
Ответ №2:
Вы можете использовать a TextBlock
с a Binding
и StringFormat
для форматирования связанного текста.
<Button>
<TextBlock Text="{Binding Source={x:Static resPath:Resources.ZoomIn}, StringFormat={}{0} x1}"/>
</Button>
Это {}
escape-последовательность, {0}
которая просто ссылается на привязанное значение (при привязке нескольких значений, например, с помощью a MultiBinding
вы можете получить доступ к нескольким), а остальное — ваш пользовательский текст.
Комментарии:
1. Это имело бы смысл в случае, если ZoomIn является статическим свойством с уведомлением об изменении. Вы бы написали
Text="{Binding Path=(resPath:Resources.ZoomIn), StringFormat={}{0} x1}"
.2. Извините, но таким образом оказалось, что он некорректно отображает позиции кнопок на панели стека.