[英]Setting focus on Passwordbox
所以我有一個帶有登錄窗口的C#WPF應用程序。 在此窗口中,我還有一個復選框,可確保用戶下次啟動該應用程序時的用戶名安全(就像“記住我”一樣)。
顯然,此窗口的正常“焦點”是用戶名。 但是,如果用戶選擇了“記住我”復選框,則密碼框應位於“焦點”位置(因為用戶名已填寫)。
所以我寫了這段代碼:
在Xaml中:
<PasswordBox
Name="PW"
Grid.Row="2"
Grid.Column="1"
Margin="10 0 10 0"
VerticalContentAlignment="Center"
Height="45"/>
<CheckBox
Name="CB"
Grid.Row="1"
Grid.Column="1"
VerticalAlignment="Bottom"
Margin="10"
Content="Remember me"/>
<TextBox
Name="Tbx"
Grid.Row="1"
Grid.Column="1"
Margin="10 0 10 0"
Text="{Binding Path=User}"
VerticalContentAlignment="Center"
Height="45"/>
<Button
Name="Btn"
Grid.Row="3"
Grid.Column="1"
Content="Login"
Height="40"
Width="100"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Command="{Binding Path=LoginUser}"
Click="Btn_Click"
IsDefault="True"/>
文本框中的綁定只是一個屬性,它獲取輸入的值。
按鈕中的綁定也只是一個屬性,該屬性檢查用戶名和密碼,然后打開另一個窗口(所以我不認為這很必要顯示)。
在xaml.cs中
private void Btn_Click(object sender, RoutedEventArgs e)
{
if (Cb.IsChecked == true)
{
Properties.Settings.Default.Username = Tbx.Text;
}
}
因此,使用此Button_Click,我可以保護輸入的用戶名的安全,以便應用程序下次可以記住它。 這可以正常工作。
現在有趣的部分是Window_Loaded事件:
try
{
IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForAssembly();
StreamReader srReader = new StreamReader(new IsolatedStorageFileStream("isotest", FileMode.OpenOrCreate, isolatedStorage));
string Input = srReader.ReadLine().TrimStart();
string InputCut = Input.Substring(0, Input.Length - 25);
Tbx.Text = InputCut;
Cb.IsChecked = true;
Pb.Focus()
}
catch(Exception ex)
{}
因此,如果CheckBox被選中,他將遍歷try部分,並准備使用Pb.Focus()(我已逐步完成),但密碼框卻無法獲得焦點。 然后我想,可能是因為“嘗試-抓住”,所以我試圖將“焦點”設置在此范圍之外,但同樣會出現問題。 Passwortbox不會變得專注。
我已經在Google上搜索了確切的問題,但找不到任何內容(只有關於如何將焦點設置在密碼箱上的常見問題)
我也在這里檢查了stackoverflow,但是我發現的唯一發現是: 在應用程序啟動時將焦點放在PasswordBox上,這顯然不是我的問題,我已經在Window_Loaded中擁有了Focus。
預期的結果是,密碼框正在獲得Focus,但是某種程度上卻不會。 我什至沒有收到任何錯誤消息,因此我無法提供任何錯誤消息。
如果您需要更多信息,請直接打給我,然后我將編輯問題。 我希望任何人都知道這個問題,並可以在這里為我提供幫助。 謝謝!
我想您的問題可能被您的空白所掩蓋。
IE瀏覽器您有一個錯誤,但捕獲只是“吃”它,所以您永遠不會看到它。
您可以單步執行,卻沒有注意到它跳到了陷阱,這似乎很奇怪。
當然,逐步執行將使您的工作變得混亂。
這是工作標記和代碼:
<StackPanel>
<TextBox
Name="Tbx" Height="45"/>
<PasswordBox
Name="PW" Height="45"/>
<CheckBox
Name="CB" Content="Remember me"/>
<Button
Name="Btn" Height="40" Width="100" IsDefault="True"/>
</StackPanel>
private void Window_Loaded(object sender, RoutedEventArgs e)
{
string InputCut = "Blaa";
Tbx.Text = InputCut;
CB.IsChecked = true;
PW.Focus();
}
創建一個新的解決方案。
現在還沒有。
因為任何錯誤都可能位於代碼中的某個地方,所以您沒有向我們展示。
將上面的標記和代碼粘貼到主窗口中。
確保您掛接了已加載的事件。
觀看它的工作。
我的建議是:
刪除嘗試捕獲,不要再使用空的捕獲塊。
修復您的代碼,從隔離存儲中讀取該字符串,使其更健壯。
對於WPF,它通常更常用
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
用戶的appdata漫游根目錄。
如果您的代碼仍然無法正常工作或出錯,則將您的應用程序片段添加到您創建的新解決方案中,直到您重現該問題為止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.