設置任何網格控件,其不希望看到一個輪廓的RenderTransform,例如:
<Grid RenderTransform="1 0 0 1 10000 10000">
你可以使用一個附加屬性,使這個方便,讓您的網格自動設置爲每當它是通過編寫簡單的隱藏變換:
<Grid my:OutOfThisWorld.WhenHidden="True">
下面是代碼:
public class OutOfThisWorld : DependencyObject
{
// GoAway
public static bool GetGoAway(DependencyObject obj) { return (bool)obj.GetValue(GoAwayProperty); }
public static void SetGoAway(DependencyObject obj, bool value) { obj.SetValue(GoAwayProperty, value); }
public static readonly DependencyProperty GoAwayProperty = DependencyProperty.RegisterAttached("GoAway", typeof(bool), typeof(OutOfThisWorld), new UIPropertyMetadata
{
PropertyChangedCallback = (obj, e) =>
{
obj.SetValue(UIElement.RenderTransformProperty,
(bool)e.NewValue ? new TranslateTransform(100000,10000) : null);
}
});
// WhenHidden
public static bool GetWhenHidden(DependencyObject obj) { return (bool)obj.GetValue(WhenHiddenProperty); }
public static void SetWhenHidden(DependencyObject obj, bool value) { obj.SetValue(WhenHiddenProperty, value); }
public static readonly DependencyProperty WhenHiddenProperty = DependencyProperty.RegisterAttached("WhenHidden", typeof(bool), typeof(OutOfThisWorld), new PropertyMetadata
{
PropertyChangedCallback = (obj, e) =>
{
if((bool)e.NewValue)
BindingOperations.SetBinding(obj, GoAwayProperty,
new Binding("Visibility")
{
RelativeSource=RelativeSource.Self,
Converter = new IsHiddenConverter()
});
}
});
class IsHiddenConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return (Visibility)value == Visibility.Hidden;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); }
}
}
工作原理:設置OutOfThisWorld.WhenHidden將創建一個到OutOfThisWorld.GoAway屬性的綁定,只要目標的可見性爲「隱藏」,GoAway屬性就爲true。當GoAway真正實現時,將添加RenderTransform。
說了這麼多,你有沒有考慮過使用Visibility = Collapsed而不是Visibility = Hidden?這可能會更簡單。
我也必須強烈支持Will的觀察,這是一個糟糕的設計。如何「堅持下去」是真的嗎?如果這是一件政治事情,我爲你感到難過。但從技術角度來看,使用模板將其重構爲真正的選項卡控件應該非常容易。
謝謝Ray,這個解決方法解決了問題中提到的問題。還要感謝您和Will的設計建議。我已經在競選'不爛'的設計。 – Stewbob 2010-11-19 18:43:45