2009-08-16 5 views
1

Я применил стиль ошибки для текстовых полей, используя следующий код. Это устанавливает всплывающую подсказку и помещает хорошее изображение ошибки справа от текстового поля, если элемент сообщает о статусе ошибки через интерфейс IDataErrorInfo:Стиль ошибки радио кнопки

<!-- Set error style for textboxes --> 
    <Style x:Key="txtBoxErrStyle" TargetType="{x:Type TextBox}"> 
     <Style.Triggers> 
      <Trigger Property="Validation.HasError" Value="True"> 
       <Setter Property="ToolTip" 
         Value="{Binding RelativeSource={x:Static RelativeSource.Self}, 
         Path=(Validation.Errors)[0].ErrorContent}" /> 
      </Trigger> 
     </Style.Triggers> 

     <Setter Property="Validation.ErrorTemplate"> 
      <Setter.Value> 
       <ControlTemplate> 
        <DockPanel DockPanel.Dock="Right"> 
         <AdornedElementPlaceholder /> 
         <Image Source="Icons/Error.png" 
           Height="16" 
           Width="16" 
           ToolTip="{Binding Path=AdornedElement.ToolTip, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Adorner}}}" /> 
        </DockPanel> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

Это работает очень хорошо для меня, добавляя текст наконечника инструмента и настройки изображение Error.png справа от текстового поля. Но то, что я хочу сделать, это дать аналогичную функциональность переключателю. Я попытался сделать это путем копирования выше кода и изменить тег, чтобы быть:

<!-- Set error style for radio buttons --> 
    <Style x:Key="radioBtnErrStyle" TargetType="{x:Type RadioButton}"> 

поле, что кнопка радио обязана сообщать об ошибках через интерфейс IDataErrorInfo, а переключатель сам ValidatesOnDataErrors установлен верно ,

Этот тип работал для меня. Когда радиокнопка считается ошибочной, подсказка установлена ​​в для сообщения об ошибке, возвращаемого из процедуры IDataErrorInfo. Но я не могу представить изображение Error.png для отображения в форме.

Я пробовал некоторые основные привинчивания со стилем, такие как замена порядка и элементов, но ничего, что я пытался, казалось, сработало.

Итак, любые идеи относительно того, как я могу получить изображение для отображения?

Update

ответ Штеффен ударил гвоздь по голове. Увеличение маржи позволило отобразить изображение.

Однако я столкнулся с другой, отдельной проблемой в том случае, если условие ошибки присутствует, когда программа сначала запускается, подсказка инструмента будет отображать условие ошибки, но изображение не будет отображаться. Только когда условие ошибки активно поднимается после запуска программы, изображение также отображается. Я видел это раньше, но еще не видел правильного способа его обработки. Время исследовать еще одну тему WPF!

+0

Что касается вашего обновления и без погружения в механику Validation.ErrorTemplate здесь: по-видимому, срабатывает триггер, в то время как уже связанный шаблон не работает - возможно, вы могли бы попытаться связать свойство шаблона позже с помощью триггера и обойти проблему? Validation.ErrorTemplate, похоже, требует особого лечения здесь и там, см. Http://stackoverflow.com/questions/1194181/wpf-errortemplate-visible-when-not-focused для соответствующей проблемы. –

ответ

2

Учитывая, что стиль, кажется, чтобы правильно применять в первую очередь, это, скорее всего, просто эффект от конкретной оконной композиции, то есть ширина, запас и размещение соответствующих элементов управления:

В зависимости от макета образ может закончиться позади кнопки «холст» переключателя и, таким образом, невидимым, если их недостаточно места в окне, чтобы отобразить изображение рядом с вашим управлением, например если RadioButton заполняет всю ширину строки StackPanel.

Следовательно, вы должны иметь возможность «показывать» изображение, предоставляя достаточно места, как вы сочтете нужным, например.путем установки соответствующего правого поля, по крайней мере, 16 в вашем случае:

<RadioButton Margin="0,0,16,0"/> 

Согласно этим предположениям, я действительно был в состоянии воспроизвести проблему: предположительно, это легко упустить из виду, потому что ширина и/или края в TextBox часто предоставляются явно и видимо в любом случае из-за границы по умолчанию TextBox, в то время как это менее распространено для RadioButton, и его граница по умолчанию невидима.

0

Вы можете создать настраиваемый элемент управления, который имеет стандартную радиокнопку, а также изображение рядом с ним справа, которое вы могли бы установить, когда оно находится в состоянии ошибки?

В качестве альтернативы, вы подумали о замене заливки кнопки raido на изображение?

Смежные вопросы