Почему вы не хотите использовать стиль? Это, безусловно, самый простой способ сделать это.
Один из способов сделать это без стиля - с помощью преобразователя логической видимости, то есть что-то вроде этого:
public class BooleanToVisibilityConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return false;
var invert = (parameter == null) ? false : Boolean.Parse(parameter.ToString());
if ((Boolean)value ^ invert)
return Visibility.Visible;
else
return Visibility.Hidden;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
Какой вы затем будет использовать так:
<Button x:Name="button1" Content="Button 1" Visibility="{Binding IsButton1Visible, Converter={StaticResource BooleanToVisibilityConverter}}" />
<Button x:Name="button2" Content="Button 2" Visibility="{Binding IsButton1Visible, Converter={StaticResource BooleanToVisibilityConverter}, ConverterParameter=true}" />
Если серьезно, просто используйте DataTrigger в стиле, чтобы изменить видимость или, что еще лучше, создать шаблон всего элемента управления. Преобразователи - это то, что вы используете, когда данные должны быть преобразованы между слоями представления и модели, а триггеры данных - это то, что вы используете, когда они только односторонние.