Результаты поиска
Скрытие унаследованных элементов
Я ищу какой-то способ эффективно скрыть унаследованные члены. У меня есть библиотека классов, которые наследуются от общих базовых классов. Некоторые из более поздних классов-потомков наследуют свойства зависимостей, которые стали рудиментарными и могут быть немного запутанными при использовании IntelliSense или классов в визуальном конструкторе.
Все эти классы являются элементами управления, которые записываются для компиляции либо для WPF, либо для Silverlight 2.0. Я знаю о ICustomTypeDescriptor и ICustomPropertyProvider, но я почти уверен, что они не могут быть использованы в Silverlight.
Это не столько функциональная проблема, сколько проблема удобства использования. Что же мне делать?
Обновление
Некоторые свойства, которые я действительно хотел бы скрыть, происходят от предков, которые не являются моими собственными, и из-за специфического инструмента, для которого я разрабатываю, я не могу сделать скрытие членов с помощью оператора new . (Я знаю, это смешно)
Числовой ввод данных в WPF
Как вы обрабатываете ввод числовых значений в WPF приложениях?
Без элемента управления NumericUpDown я использую TextBox и обрабатываю его событие PreviewKeyDown с помощью кода ниже, но это довольно уродливо.
Кто-нибудь нашел более изящный способ получить числовые данные от пользователя, не полагаясь на сторонний элемент управления?
private void NumericEditPreviewKeyDown(object sender, KeyEventArgs e)
{
bool isNumPadNumeric = (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) || e.Key == Key.Decimal;
bool isNumeric = (e.Key >= Key.D0 && e.Key <= Key.D9) || e.Key == Key.OemPeriod;
if ((isNumeric || isNumPadNumeric) && Keyboard.Modifiers != ModifierKeys.None)
{
e.Handled = true;
return;
}
bool isControl = ((Keyboard.Modifiers != ModifierKeys.None && Keyboard.Modifiers != ModifierKeys.Shift)
|| e.Key == Key.Back || e.Key == Key.Delete || e.Key == Key.Insert
|| e.Key == Key.Down || e.Key == Key.Left || e.Key == Key.Right || e.Key == Key.Up
|| e.Key == Key.Tab
|| e.Key == Key.PageDown || e.Key == Key.PageUp
|| e.Key == Key.Enter || e.Key == Key.Return || e.Key == Key.Escape
|| e.Key == Key.Home || e.Key == Key.End);
e.Handled = !isControl && !isNumeric && !isNumPadNumeric;
}
Сортировка составной коллекции
Таким образом, WPF не поддерживает стандартное поведение сортировки или фильтрации для представлений CompositeCollections, так что было бы лучше всего решить эту проблему.
Существует две или более коллекций объектов различных типов. Вы хотите объединить их в единую сортируемую и фильтруемую коллекцию (без необходимости вручную выполнять сортировку или фильтр).
Один из рассмотренных мною подходов заключается в создании новой коллекции объектов с несколькими основными свойствами, включая те, по которым я хотел бы отсортировать коллекцию, и экземпляр объекта каждого типа.
class MyCompositeObject
{
enum ObjectType;
DateTime CreatedDate;
string SomeAttribute;
myObjectType1 Obj1;
myObjectType2 Obj2;
{
class MyCompositeObjects : List<MyCompositeObject> { }
А затем пройдите через мои две коллекции объектов, чтобы построить новую составную коллекцию. Очевидно, что это немного грубый метод, но он будет работать. Я получил бы все стандартные функции сортировки и фильтрации представлений в моей новой коллекции составных объектов, и я мог бы поместить в нее шаблон данных для правильного отображения элементов списка в зависимости от того, какой тип фактически хранится в этом составном элементе.
Какие есть предложения, чтобы сделать это более элегантным способом?
Как разместить форму WPF в приложении MFC
Я ищу любые ресурсы для размещения формы WPF в существующем приложении MFC. Может ли кто-нибудь указать мне в правильном направлении, как это сделать?
Переменные привязки в WPF
Я создаю UserControl для богатого TreeView (тот, который имеет контекстные меню для переименования узлов, добавления дочерних узлов и т. д.). Я хочу иметь возможность использовать этот элемент управления для управления или навигации по любым иерархическим структурам данных, которые я создам. В настоящее время он работает для любой структуры данных, которая реализует следующий интерфейс (интерфейс на самом деле не должен быть реализован, однако требуется только присутствие этих членов):
interface ITreeItem
{
string Header { get; set; }
IEnumerable Children { get; }
}
Затем в моем UserControl я использую шаблоны для привязки моего дерева к структуре данных, например:
<TextBlock x:Name="HeaderTextBlock" Text="{Binding Path=Header}" />
То, что я хотел бы сделать, это определить имя каждого из этих членов в моем RichTreeView, позволяя ему адаптироваться к ряду различных структур данных, например:
class MyItem
{
string Name { get; set; }
ObservableCollection<MyItem> Items;
}
<uc:RichTreeView ItemSource={Binding Source={StaticResource MyItemsProvider}}
HeaderProperty="Name" ChildrenProperty="Items" />
Есть ли способ выставить путь привязки внутри UserControl как публичное свойство этого UserControl? Есть ли какой-то другой способ решить эту проблему?
Предотвращение утечек памяти с помощью прикрепленных моделей поведения
Я создал "attached behaviour" в своем приложении WPF, которое позволяет мне обрабатывать нажатие клавиши Enter и переходить к следующему элементу управления. Я называю его EnterKeyTraversal.IsEnabled, и вы можете увидеть код на моем блоге здесь .
Моя главная проблема сейчас заключается в том, что у меня может быть утечка памяти, так как я обрабатываю событие PreviewKeyDown на UIElements и никогда явно не "unhook" событие.
Как лучше всего предотвратить эту утечку (если она действительно существует)? Следует ли мне сохранить список элементов, которыми я управляю, и отцепить событие PreviewKeyDown в событии Application.Exit? Удалось ли кому-нибудь добиться успеха с привязанным поведением в своих собственных приложениях WPF и придумать элегантное решение для управления памятью?
Как получить список установленных BitmapEncoders / декодеров (мир WPF)?
В WindowsForms world вы можете получить список доступных кодеров/декодеров изображений с помощью
System.Drawing.ImageCodecInfo.GetImageDecoders() / GetImageEncoders()
Мой вопрос заключается в том, есть ли способ сделать что-то аналогичное для мира WPF, что позволило бы мне получить список доступных
System.Windows.Media.Imaging.BitmapDecoder / BitmapEncoder
Как применить несколько стилей в WPF
В WPF, как бы я применил несколько стилей к FrameworkElement ? Например, у меня есть элемент управления, который уже имеет стиль. У меня также есть отдельный стиль, который я хотел бы добавить к нему, не сдувая первый. Стили имеют разные TargetTypes, поэтому я не могу просто расширить один с другим.
Включение кнопки в WPF в зависимости от ListBox.SelectedIndex
У меня есть довольно классическая ситуация UI - два ListBoxes с именами SelectedItems и AvailableItems -идея заключается в том , что элементы, которые вы уже выбрали, живут в SelectedItems, в то время как элементы, доступные для добавления в SelectedItems (т. е. каждый элемент, который еще не там), живут в AvailableItems .
Кроме того, у меня есть кнопки < и > для перемещения текущего выбора из одного списка в другой (в дополнение к двойному щелчку, который отлично работает).
Можно ли в WPF настроить стиль / триггер для включения или отключения кнопок перемещения в зависимости от того, что было выбрано в любом ListBox? SelectedItems находится слева, поэтому кнопка < переместит выбранный AvailableItems в этот список. Однако, если никакие элементы не выбраны ( AvailableItems.SelectedIndex == -1 ), я хочу, чтобы эта кнопка была отключена ( IsEnabled == false ) - и наоборот для других list/button.
Возможно ли это сделать непосредственно в XAML, или мне нужно создать сложную логику в codebehind, чтобы справиться с этим?
Как правильно создать приложение с одним экземпляром WPF?
Используя C# и WPF под .NET (а не Windows формы или консоль), как правильно создать приложение, которое можно запустить только в одном экземпляре?
Я знаю, что это как-то связано с какой-то мифической вещью, называемой a mutex, и редко могу найти кого-то, кто потрудился бы остановиться и объяснить, что это такое.
Код должен также сообщить уже запущенному экземпляру, что пользователь попытался запустить второй экземпляр, и, возможно, также передать любые аргументы командной строки, если таковые существуют.
Мощные инструменты для создания графического интерфейса ОС Х?
Что бы вы порекомендовали для разработки OS X графического приложения, подобного тем, которые возможны в WPF?
Мой конкретный фон находится в Smalltalk & Java, но в настоящее время я работаю в основном в DHTML/.NET (ASP.NET/C#).
Включение кнопки в WPF в зависимости от ListBox.SelectedIndex
У меня есть довольно классическая ситуация UI - два ListBoxes с именами SelectedItems и AvailableItems -идея заключается в том , что элементы, которые вы уже выбрали, живут в SelectedItems, в то время как элементы, доступные для добавления в SelectedItems (т. е. каждый элемент, который еще не там), живут в AvailableItems .
Кроме того, у меня есть кнопки < и > для перемещения текущего выбора из одного списка в другой (в дополнение к двойному щелчку, который отлично работает).
Можно ли в WPF настроить стиль / триггер для включения или отключения кнопок перемещения в зависимости от того, что было выбрано в любом ListBox? SelectedItems находится слева, поэтому кнопка < переместит выбранный AvailableItems в этот список. Однако, если никакие элементы не выбраны ( AvailableItems.SelectedIndex == -1 ), я хочу, чтобы эта кнопка была отключена ( IsEnabled == false ) - и наоборот для других list/button.
Возможно ли это сделать непосредственно в XAML, или мне нужно создать сложную логику в codebehind, чтобы справиться с этим?
Как остановить анимацию в C# / WPF?
У меня есть что-то вроде этого:
barProgress.BeginAnimation(RangeBase.ValueProperty, new DoubleAnimation(
barProgress.Value, dNextProgressValue,
new Duration(TimeSpan.FromSeconds(dDuration)));
Теперь, как бы вы остановили эту анимацию ( DoubleAnimation)? Причина, по которой я хочу это сделать, заключается в том, что я хотел бы начать новую анимацию (кажется, это работает, но трудно сказать) и в конечном итоге остановить последнюю анимацию...
Изображение UriSource и привязка данных
Я пытаюсь привязать список пользовательских объектов к изображению WPF, как это:
<Image>
<Image.Source>
<BitmapImage UriSource="{Binding Path=ImagePath}" />
</Image.Source>
</Image>
Но это не работает. Это ошибка, которую я получаю:
"Свойство 'UriSource' или свойство 'StreamSource' должно быть установлено."
Что я упускаю из виду?
WPF способ устранения сглаживания
Сглаживание не может быть отключено в WPF. Но я хочу удалить размытый вид шрифтов WPF, когда они маленькие.
Одним из возможных вариантов было бы использование компонента .net 2.0. Это выглядит так, как будто он потеряет способность прозрачности и поддержку смешивания. Хотя никогда не пробовал.
У кого-нибудь есть решение для этого? Есть ли у него какие-то недостатки?
Спасибо
Когда инициализируется NavigationService?
Я хочу поймать событие NavigationService.Navigating с моей страницы, чтобы предотвратить переход пользователя вперед. У меня есть обработчик событий, определенный таким образом:
void PreventForwardNavigation(object sender, NavigatingCancelEventArgs e)
{
if (e.NavigationMode == NavigationMode.Forward)
{
e.Cancel = true;
}
}
... и это прекрасно работает. Однако я не уверен, где именно разместить этот код:
NavigationService.Navigating += PreventForwardNavigation;
Если я помещу его в конструктор страницы или инициализированный обработчик событий, то NavigationService все равно будет null, и я получу NullReferenceException. Однако если я помещаю его в обработчик загруженных событий для страницы, то он вызывается каждый раз при переходе на страницу. Если я правильно понимаю, это означает, что я обрабатываю одно и то же событие несколько раз.
Могу ли я добавить один и тот же обработчик к событию несколько раз (как это произошло бы, если бы я использовал загруженное событие страницы для его подключения)? Если нет, то есть ли какое-то место между инициализацией и загрузкой, где я могу сделать эту проводку?
Так чего же мне не хватает с этим вот WPF?
Фон: у меня есть небольшое приложение для воспроизведения видео с UI, вдохновленное почтенным Sasami2k, только что обновленное для использования VMR9 (т. е. Direct3D9 с DirectShow) и менее нестабильное. В настоящее время это приложение C++, использующее raw Win32, по необходимости: ни один из различных наборов инструментов не стоит ни гроша. WPF, в частности, было невозможно из-за ограничений его воздушного пространства.
OK, так что теперь, когда существует D3DImage, вполне возможно смешать и сопоставить D3D/VMR9/DirectShow и WPF. Учитывая прошлые разочарования в неразрешимости Win32, это кажется хорошей вещью.
Но знаешь, я падаю на первом же препятствии здесь.
С помощью Win32 я создал (очень легко) окно без границ, которое можно изменять, изменять размер пропорционально, привязывать к краям экрана и занимать весь экран (включая область панели задач) при максимальном увеличении. Это видео-приложение, так что все это довольно желательные свойства.
OK, так как же сделать то же самое с WPF?
В Win32 я использую: WM_GETMINMAXINFO для управления максимизацией поведения WM_NCHITTEST для управления изменением размера границ WM_MOVING для управления snap-to-screen-edges WM_SIZING для управления соотношением сторон изменения размера
Однако, глядя на WPF, кажется, что различные события прибывают слишком поздно, если я не ошибаюсь в документации?
Например, я не знаю, когда я нахожусь в середине движения, так как LocationChanged говорит, что он срабатывает только после перемещения окна (что слишком поздно). Аналогично, похоже, что StateChanged срабатывает только после восстановления/максимизации окна (когда мне нужна информация до максимизации, чтобы сообщить системе правильный максимальный размер).
И я, кажется, совершенно упускаю из виду, где система говорит мне о размерах. Точно так же и хит-тестирование.
Итак, эм, я что-то упускаю здесь, или у меня нет другого выбора, кроме как вернуться к подключению wndproc этой штуки в любом случае? Могу ли я делать то, что хочу, не подключая WndProc?
Если мне придется использовать WndProc, я могу также придерживаться своей существующей кодовой базы; я хочу иметь более простой и чистый код UI, и уход от WndProc является фундаментальным для этого.
Если мне действительно нужно зацепить WndProc, я должен задаться вопросом - почему ? Win32 получил сообщения окна sizing/sized, moving/moved, poschanging/poschanged, и все они полезны. Почему бы WPF не повторить тот же набор событий? Это выглядит как ненужный пробел в функциональности.
Кроме того, это означает, что WPF привязан к конкретной реализации, зависящей от USER32. Это означает, что MS не может (скажем, в Windows 7 или 8) инвертировать слой отображения, чтобы сделать WPF "native" и эмулировать HWNDs и WndProcs для устаревших приложений-даже если это именно то, что должен делать MS.
WPF Listbox стиль с кнопкой
У меня есть ListBox, который имеет стиль, определенный для ListBoxItems. Внутри этого стиля у меня есть несколько ярлыков и кнопка. С помощью этой кнопки я хочу определить событие щелчка, которое может быть обработано на моей странице (или любой странице, которая использует этот стиль). Как создать обработчик событий на странице WPF для обработки события из стиля ListBoxItems?
Вот мой стиль (только затронутый код):
<Style x:Key="UsersTimeOffList" TargetType="{x:Type ListBoxItem}">
...
<Grid>
<Button x:Name="btnRemove" Content="Remove" Margin="0,10,40,0" Click="btnRemove_Click" />
</Grid>
</Style>
Спасибо!
Может кто-нибудь указать мне на некоторые руководства для WPF
У меня возникли проблемы с поиском хороших гидов для WPF.
У меня есть опыт работы в C# и .NET но я ничего не знаю о WPF, кроме обычного маркетингового описания технологии в целом.
Может ли кто-нибудь указать мне на хороший учебник для начинающих/руководство по WPF.
Где искать верстальщиков XAML (Expression Blend)?
Профессия дизайнера/верстальщика XAML для приложений WPF настолько нова, что традиционные каналы не достаточно эффективны.
.NET, WPF, какую версию .NET выбрать — 3.0 или 3.5
Всем привет!
Ситуация следующая. У нас есть достаточно популярная программа для конечных пользователей (не Enterprise), написанная на WinForms и .NET 2.0. В свое время выбрали именно 2.0, чтобы покрыть как можно большее количество пользователей.
Сейчас планируем разрабатывать новую версию. Хотелось бы сделать красивый и необычный дизайн, поэтому оставаться в рамках WinForms будет не очень удобно, и рассматриваем переход на WPF.
У нас есть такие данные по пользователям:
85-90% уже имеют установленный .NET 3.0
60-65% уже имеют установленный .NET 3.5
Идеально было бы остановиться на .NET 3.0, и не заставлять пользователей выкачивать 200 с лишним мегабайт при установке программы (для некоторых трафик все еще является проблемой).
Переходим к вопросам
1. Чем отличается реализация WPF в .NET 3.0 от .NET 3.5?
2. Добавилось ли в 3.5 что-то новое/нужное/удобное?
3. Есть ли в WPF в 3.0 какие-то критичные/неожиданные дефекты, о которых стоило бы знать?
4. Что бы вы выбрали, если бы были на нашем месте?
Заранее спасибо!
Узнать предполагаемый размер Label (C# + WPF)?
Надо узнать, каким будет размер Label в пикселях, если его содержимым будет определённая строка, при этом не отображая сам Label.
Код
Label label = new Label();
label.Content = root.value; //тип string
return label.ActualHeight;
возвращает ноль.
Label label = new Label();
label.Content = root.value; //тип string
return label.ActualHeight;