Я пытаюсь сделать содержимое метки невидимым, чтобы я мог наложить это на содержимое позади. Например, фон элемента управления имеет сплошной цвет, но текст имеет альфа-прозрачность, что позволяет мне видеть весь элемент управления (как трюк с фотошопом). Таким образом, динамический контент можно будет увидеть на переменном фоне. Я применяю этот шаблон с файлами PNG, но этого явно не будет, когда нужно изменить содержимое. Отличный пример этого вопроса (так как я не очень хорошо его задаю) можно найти здесь ... но, конечно, это для css. (Как сделать видимым текст?) Любая помощь по этому поводу будет оценил
Вопрос
Установите альфа-прозрачность содержимого метки WPF вместо прозрачности всего элемента управления
- Некоторое время это был мой собственный вопрос ... Маскировка текста из фона границы. Есть способ добиться этого, но он не требует использования метки. с помощью кода позади вы можете определить OpacityMask для границы, удаляющей текст. uncommon_name 03.01.2016
- Я не уверен, что понимаю. Я понимаю использование opacitymask, но до сих пор мои попытки использовать его в этом UserControl были безуспешными. Я просто попробовал это в коде, но безрезультатно. Что мы помещаем в рамку, чтобы текст был прозрачным? TextBlock? Я пробовал несколько комбинаций на основе вашего предложения, но мне все еще нечего показать. :( UnOjO2010 03.01.2016
- я пытаюсь сказать, что я уверен, что мы можем визуализировать текстовый блок с помощью техники (stackoverflow.com/a/28626055/ 4805219), если бы мы могли только изменить пиксели результирующих объектов BitmapSource, инвертировать их альфа-канал и установить его как OpacityMask, это сработало бы! :) uncommon_name 03.01.2016
Ответы
Ответ 1 · рейтинг 1 · uncommon_name
Итак, я нашел решение этой проблемы ... Хитрость в том, чтобы использовать Clip вместо OpacityMask.
Сначала посмотрите на макет:
<Grid Background="Red">
<Border Background="White" Name="targetImage" VerticalAlignment="Center" Height="200"/>
<Button VerticalAlignment="Bottom" Content="render" Click="ButtonBase_OnClick"></Button>
</Grid>
Здесь сетку с красным фоном можно использовать в качестве фонового изображения! Граница внутри покрывает его белым цветом. Затем я помещаю кнопку, которая при нажатии удаляет нужный нам текст с границы.
вот код события нажатия кнопки:
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
Typeface face = new Typeface("Candara");
FormattedText tx = new FormattedText("Hello", Thread.CurrentThread.CurrentUICulture, FlowDirection.LeftToRight, face, 70, Brushes.Black);
Geometry textGeom = tx.BuildGeometry(new Point(0, 0));
Rect boundingRect = new Rect(new Point(-100000, -100000), new Point(100000, 100000));
RectangleGeometry boundingGeom = new RectangleGeometry(boundingRect);
GeometryGroup group = new GeometryGroup();
group.Children.Add(boundingGeom);
group.Children.Add(textGeom);
targetImage.Clip = group;
}
По сути, это создание текста! тогда нам нужно инвертировать маску. инвертирование выполняется с помощью boundingRect.
Изменить: почти забыл. Вы можете поместить всю эту логику в пользовательский элемент управления. и запускайте этот код каждый раз, когда изменяется свойство Text вашего Usercontrol.
развлекайся ;)
Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.
Похожие материалы
- Шаблон управления кнопкой с изменяемым размером круга
- Шаблон проекта Visual Studio MVVM для VS2010?
- WPF: событие изменения размера GridViewColumn
- Преобразование приложения WPF/ADO.NET Data Services в шаблон MVVM - примеры
- Коллекция устаревших элементов в ListPicker во время обновления привязки
- Создание элемента управления WPF, загружающего XAML во время выполнения