我正在使用Silverlight C#和XAML處理Windows Phone應用程序。我的頁面包含一個ListBox,用於呈現用戶可以操作的數據綁定對象列表,即添加/重命名/刪除。Silverlight TextBox VisibilityChanged事件
我知道了工作的項目的添加/重命名完成就地,通過交換一個TextBlock爲根據對象的狀態,即文本框(bool IsEditable
屬性)和利用參數化的VisibilityConverter
來管理相反的可見性狀態。
<UserControl.Resources>
<local:VisibilityConverter x:Key="VisibilityConverter" True="Visible" False="Collapsed"/>
<local:VisibilityConverter x:Key="InvertedVisibility" True="Collapsed" False="Visible"/>
</UserControl.Resources>
...
<TextBlock Text="{Binding Name}" Visibility="{Binding IsEditable, Converter={StaticResource InvertedVisibility}}" />
<TextBox Text="{Binding Name}" Visibility="{Binding IsEditable, Converter={StaticResource VisibilityConverter}}"/>
的事情是,我也希望,當它變得可見,從而使屏幕上的鍵盤彈出,而無需點擊文本框的用戶的文本框會自動搶焦點。
因爲有定期的TextBox沒有VisibilityChanged事件,我子類文本框到TextBox2中,並加入我自己的:
public class TextBox2 : TextBox
{
public TextBox2()
{
DefaultStyleKey = typeof(TextBox);
}
public static readonly DependencyProperty VisibilityChangedProperty = DependencyProperty.Register(
"VisibilityChanged",
typeof(string),
typeof(TextBox2),
new PropertyMetadata("Set the VisibilityChanged event handler"));
public event VisibilityChangedEventHandler VisibilityChanged;
public delegate void VisibilityChangedEventHandler(object sender, EventArgs e);
public new Visibility Visibility
{
get
{
return base.Visibility;
}
set
{
if (base.Visibility != value)
{
base.Visibility = value;
VisibilityChanged(this, new EventArgs());
}
}
}
}
現在我的XAML看起來像這樣:
<TextBlock Text="{Binding Name}" Visibility="{Binding IsEditable, Converter={StaticResource InvertedVisibility}}"/>
<local:TextBox2 Text="{Binding Name}" Visibility="{Binding IsEditable, Converter={StaticResource VisibilityConverter}}" VisibilityChanged="ListEdit_VisibilityChanged"/>
且事件處理程序像這個:
void ListEdit_VisibilityChanged(object sender, EventArgs e)
{
TextBox textBox = (TextBox)sender;
if (textBox.Visibility == System.Windows.Visibility.Collapsed)
return;
textBox.Focus();
}
TextBox2呈現正常,行爲就像一個T extBox在運行時,但我的VisibilityChanged事件處理程序不觸發當數據綁定flipflip的值。
IsEditable
定義了可見性,並且TextBox2確實可以正確顯示,所以數據綁定正在工作。
我可以通過獲取TextBox2實例並在代碼中設置可見性來以編程方式觸發事件。這也是有效的。
但是這個負責設置可見性的數據綁定方案似乎不起作用。
任何想法爲什麼不呢?
謝謝馬丁!我將_property mirroring_技術與我的外部事件處理程序代碼合併在一起,並且它完美地工作。 – larryk78
不客氣! –