Опрос
Вы участвуете в программе Windows Insider?
Популярные новости
Обсуждаемые новости

10.07.2006 23:44 | Raiker

Выпущенный недавно June CTP .NET Framework 3.0 включает в себя долгожданную возможность под названием AllowsTransparency, которая позволяет создавать полу-прозрачные закругленные окна, которых все так долго ждали…

Я написал небольшой пример, иллюстрирующий некоторых с этих новых возможностей. Основная часть примера в XAML:

<Window x:Class="WindowTransparency.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="WindowTransparency" Height="300" Width="300"
    AllowsTransparency="True" WindowStyle="None"
    Background="Transparent"
    >
  <Border CornerRadius="50" Background="Blue" Opacity=".7">
    <Button Click="CloseWindow" Height="30" Width="100">Close Me
    </Button>
  </Border>
</Window>


Есть несколько вещей, которые стоит отметить в этом XAML. Во-первых, я позволил Window.AllowsTransparency, выставив значение «истина». Конечно, это означает лишь то, что окно может быть прозрачным. Но чтобы действительно добиться прозрачности, я поставил Window.Background на Transparency. Теперь, когда у меня есть прозрачное окно, я могу заняться содержанием. В этом примере я сделал скругленные края, чтобы заодно продемонстрировать и эту новую возможность.

Отметьте также, что Window.WindowStyle выставлено на нет. На данный момент окна с AllowsTransparency=true несовместимы с любым типом WindowStyle и ожидается, что это не станет проблемой (ведь если вы используете прозрачное окно, вряд ли вам понадобится стандартный стиль Win32). Проще простого добавить содержимое - на нашем примере я добавил кнопку закрытия окна через код Window.Close()). Также просто можно сделать окно перемещаемым. Следующий код способствует этому:

public Window1()
{
    InitializeComponent();
    MouseLeftButtonDown += new MouseButtonEventHandler
           (Window1_MouseLeftButtonDown);
}

void Window1_MouseLeftButtonDown(object sender,
     MouseButtonEventArgs e)
{
    DragMove();
}




Полный пример вы можете скачать здесь.

Источник: http://laurenlavoie.com/
Перевод: Райкер

Комментарии

vinc +1
Не в сети

Шо за х...
Это же простая не вистовская монотонная прозрачка всего окна...где простите преимущества .NET 3

10.07.06 23:58
0
Не в сети

И чё здесь нового? А можно сделать так, чтоб кнопка прозрачной не была? А иначе это было в Visual Studio 2005.

11.07.06 00:03
0
Не в сети

vinc - какие именно преимущества? Уточните...

QiSoft - от такого "эксперта" по прозрачности как вы странно слышать подобные вопросы. Ответ - конечно можно

11.07.06 00:46
0
vinc +1
Не в сети

QiSoft Ха, это было не только в VS2005, это было и в 2003 и во всех остальных ООП средах по моему года с 2000ого.

Espoir Ну простите, преимущества. WinFX вот все преимущества. И всё что в это вытекало ближайшие полтора года назад.

11.07.06 01:23
0
vinc +1
Не в сети

Кстати вот по поводу .NET 3.0 June СТР.
Внятная инфа :
http://blogs.msdn.com/tims/archive/2006/06/23/644558.aspx
А вот Настоящие прозрачные окна =)
http://blogs.msdn.com/tims/archive/2006/04/18/578637.aspx


Вообщем читайте правильные средства информации например блоги в МСДН
http://blogs.msdn.com/tims/ -яркий пример

11.07.06 01:29
0
Raiker +16
Не в сети

vinc, ну зачем обязательно на американцев ссылатся? Ведь можно и на нас, тот же самый Тим Снит.
http://www.thevista.ru/page.php?id=2853

Но согласись, что виста есть виста, а ХР и реализация прозрачности через WinFX на ХР - несколько другая история.

11.07.06 02:47
0
Не в сети

Espoir писал:QiSoft - от такого "эксперта" по прозрачности как вы странно слышать подобные вопросы.


Это ты о чем?
vinc, А я что, должен все версии перечислять, в которых можно было прозрачность сделать? Вообще то это можно было и на VB5 с помощью API сделать.

11.07.06 14:17
0
Не в сети

WPF предоставляет огромное количество новых инструментов для создания инновационных пользовательских интерфейсов без завязки на тип отображаемого контента - 2d/3d, text, audio, video

Возможно некоторые скажут что прозрачность была и "в Visual Studio 2005" (хотя правильно сказать что она была в NET 2.0 если речь о VS2005), или то что ее можно реализовать на WinAPI... Ну что ж друзья - вперед! Реализуйте прозрачность, трехмерные сцены, поддержку видео в native API - только вот лично мне интересно, сколько времени на это уйдет и насколько стабильный код у вас получится.

Обсуждение такой инновационной и обширной технологии как WPF ( а не WinFX, друзья мои - хоть бы в терминах разобрались) вы сводите к обсуждению поддержки прозрачности. Хотя, лично на мой взгляд - только сейчас становится возможным полноценное разделение функций дизайнера и программиста. Посредством MS Expression Graphic Designer создается изображение -> Экспортируется в XAML - > Внедряется в WPF приложение. Примеров интеграции множество - это простейшее.

11.07.06 17:06
0
Не в сети

2 Espoir : Ай, хорошо сказал!

Точнее перевел.
Да и не ты.

11.07.06 18:28
0
Не в сети

2 Espoir:

Ты вот лучше сделай так, чтобы окно(!) было полу(!)прозрачным, а элементы на нем - НЕпрозрачные. Выложи код. Тогда и поговорим. Лозунгами и рекламными материалами все кидаться умеют.

Да и не будет никто отделять дизайнера и разработчика. Дорого слишком получается. Эту "идею" не в МС придумали. Да и ОЧЕНЬ завно к тому же. Как только не разделяли, а всё равно в итоге всё возвращалось на круги своя. Только ОЧЕНЬ богатые конторы погут позволить себе такое разделение.

11.07.06 18:32
0
Не в сети

BlackTigerAP - в каком это смысле перевел? все что я пишу - я пишу сам

BlackTigerAP - не совсем понимаю что значит "полупрозраное окно", а по поводу элементов пожалуйста:

Указываем свойства для окна WindowStyle="None"
Background="Transparent"
AllowsTransparency = "True"
(либо в XAML либо в кострукторе NEW() )

В секции <Window.Resources> есть любое графическое изображение, например с именем MyImage01

<Window.Resources >
<DrawingImage x:Key="MyImage01">
<!-- Здесь описываем любое изображение -->
<!-- Надеюсь пример не нужен? -->
</DrawingImage>
</Window.Resources>

Далее контейнере Grid размещаем изображение, свойством Opacity задаем
любую прозрачность от 0 до 1 - например 50% = 0.5
<Grid>
<Image HorizontalAlignment ="Left"
VerticalAlignment ="Top"
Source ="{StaticResource MyImage01}"
Opacity="0.5"/>
</Grid>

В данном случае имеем окно в виде изображения MyImage01 с прозрачностью 50%

Далее размещаем кнопку в нижнем правом углу окна

<Grid>
<Image...../>

<Button Margin ="0,0,30,30"
VerticalAlignment ="Bottom"
HorizontalAlignment ="Right"
Content ="TheVista!ru"/>
</Grid>

Не знаю как разместить скриншот тут - могу на мыло скинуть - в результате имеем прозрачное окно с абсолютно непрозрачной кнопкой

11.07.06 19:19
0
Не в сети

Я долго не понимал смысла ваших вопросов и вот оно - прозрение
В приведенном в переводе Райкера примере кнопка размещена в составе элемента Border - именно эта рамка формирует в этом примере внешний вид окна. А так как именно ей задали прозрачность, то элементы содержащиеся в Border автоматически приняли ее свойства - в данном случае кнопка стала стольже прозрачной что и Border в котором она находится.
Достаточно разместить любой элемент вне этой рамки и можно индивидуально контролировать его внещний вид - например ту же прозрачность

11.07.06 19:28
0
Raiker +16
Не в сети

Espoir,

WPF ( а не WinFX, друзья мои - хоть бы в терминах разобрались)



А что, с каких-то пор Windows Presentation Foundation (aka Avalon) перестал быть составной частью .NET Framework 3.0 (aka WinFX)?

11.07.06 20:08
0
Не в сети

Raiker, это было уточнение. Решение проблемы зависит от точного ее изложения.

11.07.06 20:15
0
Не в сети

Маленькая демонстрация на базе NET 3.0 June CTP на обсуждаемую тему, если кому-то интересно...

http://www.thevista.ru/datas/users/2180-thevista.zip

Для запуска необходимо установить
1. Net 3.0 June CTP (http://www.microsoft.com/downloads/details.aspx?FamilyId=8D09697E-4868-4D8D-A4CF-9B82A2AE542D&displaylang=en)
2. Windows Imaging Components (http://go.microsoft.com/fwlink/?LinkID=69301&clcid=0x409)

Если запустить не получилось - читайте информацию по правильному удалению WinFX Beta 2 на www.microsoft.com

12.07.06 02:48
0
Не в сети

>>Маленькая демонстрация на базе NET 3.0 June CTP на обсуждаемую тему, если кому-то интересно...

ВОТ! Это уже серьёзный разговор. А то показывают чушь какую-то и рассказывают, как всё круто.

А "размывание" добавить? ;)

13.07.06 01:51
0
Не в сети

Жаль, что у меня нет свободного времени на изучение WPF. Своей работы, к сожалению, по горло. Это кстати будет наибольшей проблемой для WCF/WPF. Разработчики и так уже перегружены всякими "крУтями неимоверными".

13.07.06 01:53
0
Не в сети

>>А "размывание" добавить?

Там если присмотреться есть размытие текста в заголовке... мне просто не хватило времени на эксперименты с цветом размытия... поэтому получилось неконтрастно

13.07.06 15:36
0
Не в сети

Вот реально работающий код . Окно полностью прозрачное(можно сказать его нет), а элементы непрозрачные. Спасибо автору. Поставьте свою, желательно PNG картинку и посмотрите. Можете набросать кнопок на форму. Проще скачать пример и вставить этот код.
Эксперименты проводил в Expression Blend 2.


<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="WindowTransparency.Window1"
Title="WindowTransparency" Height="768" Width="1024" AllowsTransparency="True"
WindowStyle="None" Background="Transparent"
ShowInTaskbar="False" Topmost="True" WindowStartupLocation="CenterScreen" WindowState="Maximized"
>
<Image Source="bg_Слой 1.gif" Stretch="Fill"/>
</Window>

20.01.08 22:04
0
Для возможности комментировать войдите в 1 клик через

По теме

Акции MSFT
420.55 0.00
Акции торгуются с 17:30 до 00:00 по Москве
Все права принадлежат © ms insider @thevista.ru, 2022
Сайт является источником уникальной информации о семействе операционных систем Windows и других продуктах Microsoft. Перепечатка материалов возможна только с разрешения редакции.
Работает на WMS 2.34 (Страница создана за 0.039 секунд (Общее время SQL: 0.023 секунд - SQL запросов: 91 - Среднее время SQL: 0.00025 секунд))
Top.Mail.Ru