Пример использования multibinding:


<wpf:DataGridTextColumn IsReadOnly="True" Header="ФИО">
    <wpf:DataGridTextColumn.Binding>
      <MultiBinding StringFormat="{}{0} {1} {2}">
        <Binding Path="Surname" />
        <Binding Path="Name"/>
        <Binding Path="Patronymic"/>
      </MultiBinding>
    </wpf:DataGridTextColumn.Binding>
</wpf:DataGridTextColumn>

Ссылка с различными форматами строк:
Msdn
Ссылка с информацией по Binding.StringFormat:
Msdn
Вообще, в сети довольно много примеров на эту тему:
Stackoverflow

<TextBlock Name="TextBlockEntryDT" Text="{Binding ElementName=Widow, Path=Request.Date, StringFormat={}{0:Дата: dd.MM.yy HH:mm:ss}}"/>

В ресурсы добавляем данные об enum:


<ObjectDataProvider MethodName="GetValues" ObjectType="{x:Type sys:Enum}" x:Key="Gender">
  <ObjectDataProvider.MethodParameters>
    <x:Type TypeName="self:Gender"/>
  </ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</code>

Далее используем его в коде:


<Style TargetType="{x:Type TextBlock}">
<Setter Property="Text" Value="Н/д"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Gender}" Value="{x:Static Member=self:Gender.Male}">
<Setter Property="Text" Value="Муж"/>
</DataTrigger>
<DataTrigger Binding="{Binding Gender}" Value="{x:Static Member=self:Gender.Female}">
<Setter Property="Text" Value="Жен"/>
</DataTrigger>
</Style.Triggers>
</Style>

Приложение состоит из основного окна с TabControl и плагинов, каждый из которых помещается на TabItems данного контрола. У каждого плагина есть набор горячих клавиш. Для того, чтобы горячие клавиши работали, плагин должен быть в фокусе. К сожалению, простое переключение вкладок не решает проблему. Что с этим можно сделать? Я повесила на TabControl обработчик события SelectionChanged, в который добавила следующий код:


TabItem item = GlobalContainer.SelectedItem as TabItem;
    if (item == null)
        return;
    if(item.Content != null)
    {
        UIElement element = (item.Content as UIElement);
        Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Input,
        (System.Threading.ThreadStart)delegate
        {
            element.Focus();
        });
    }

Где нашла – сейчас не могу вспомнить, видимо, где-то на StackOverflow. Там еще было написано, что имеет смысл поиграть с приоритетом потока, но у меня работает и так.

Что делать, если нужно скрывать часть контролов (Visibility=”Collapsed”), и чтобы при этом окно меняло размер?
Установить свойство окна SizeToContent в значение “WidthAndHeight”.

Существует множество способов преобразования десятичных чисел в шестнадцатеричные и обратно. Ниже – то, что использую я.
Из десятичного формата в шестнадцатеричный:
string hexValue = decValue.ToString("X");
или
string.format("{0:x}", decValue);

Из шестнадцатеричного формата в десятичный:
int num = int.Parse("FF", System.Globalization.NumberStyles.HexNumber);
или
Convert.ToInt64(hexValue, 16);

В работе над нашим приложением довольно часто сталкивались с тем, что при открытии  диалога, например, таким образом:

SomeDlg wnd = new SomeDlg ();
if (wnd.ShowDialog() == true)
{
    ...
}

диалог появляется над основным окном приложения, но если переключаться между окнами, то положение диалога не сохраняется. Почему? А потому, что мы нужно делать вот так:

SomeDlg wnd = new SomeDlg ();
wnd.Owner = Window.GetWindow(this);
if (wnd.ShowDialog() == true)
{
    ...
}

Эта бесценная информация была вычитана примерно здесь:
Ссылка на stackoverflow.com

Выложу тут, чтобы не потерять. Нужен был Expander определенной высоты, с полосой прокрутки.
Вот как сделала (возможно, решение спорное, но необходимость в нем отпала, поэтому доделывать не буду):

<Expander ExpandDirection="Up"
          IsExpanded="False">
    <Expander.Content>
        <ScrollViewer MaxHeight="108">
            <StackPanel Orientation="Vertical"
                        Visibility="Visible"
                        Margin="0"
                        CanVerticallyScroll="True">
            </StackPanel>
        </ScrollViewer>
    </Expander.Content>
</Expander>

Возникла необходимость менять свойство Foreground в DatagridTextColumn в зависимости от некоего значения. Цвет менять следовало только когда значение не равно нулю, в противном случае его следовало оставить таким же, как в самом DataGrid. Самое логичное и простое в таком случае – использовать Style.Triggers. Проблема в том, что в Style.Triggers невозможно указать, что менять Foreground нужно только когда значение не равно нулю, инверсии там нет. Решение было найдено по ссылке:
http://stackoverflow.com/questions/5327819/wpf-setting-foreground-color-of-entire-form.
Решение проблемы содержится в строке:

<Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}"/>

<tk:DataGridTextColumn Binding="{Binding Caption}">

    <tk:DataGridTextColumn.ElementStyle>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="Foreground" Value="Green"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Forbidden}" Value="0">
                    <Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </tk:DataGridTextColumn.ElementStyle>

</tk:DataGridTextColumn>

Иногда возникает необходимость отобразить текущую дату в контроле, или установить SelectedDate wpf Calendar или DatePicker. Можно устанавливать дату в коде после инициализации контрола, но мне больше нравится делать это через xaml. Вот как это можно сделать:

1. Добавляем пространство имен System:

xmlns:sys=”clr-namespace:System;assembly=mscorlib”

2.Добавляем дату в нужный контрол:

<tc:DatePicker SelectedDate=”{x:Static sys:DateTime.Now}”/>