C# WPF:将字符串转换为System.Windows.Visibility
目前我正在处理数据库,我遇到了一个小问题。我有一个应用程序,在这个应用程序中,每个用户都可以将应用程序中不需要的某些部分设置为“不可见”,以便不再显示它们。 我将每个用户的信息保存在数据库中,这样应用程序就可以直接采用用户上次使用时设置的任何更改或设置。在该数据库中,“可见性”属性保存为字符串。 例如,我在数据库中保存了以下变量:C# WPF:将字符串转换为System.Windows.Visibility,c#,wpf,visual-studio-2013,C#,Wpf,Visual Studio 2013,目前我正在处理数据库,我遇到了一个小问题。我有一个应用程序,在这个应用程序中,每个用户都可以将应用程序中不需要的某些部分设置为“不可见”,以便不再显示它们。 我将每个用户的信息保存在数据库中,这样应用程序就可以直接采用用户上次使用时设置的任何更改或设置。在该数据库中,“可见性”属性保存为字符串。 例如,我在数据库中保存了以下变量: string str = Convert.ToString(System.Windows.Visibility.Visible); 现在我再次启动我的应用程序并读取
string str = Convert.ToString(System.Windows.Visibility.Visible);
现在我再次启动我的应用程序并读取该变量,该变量应表示名为“Grid”的网格的可见性属性,要设置该属性,我要做的事情如下:
SqlDataReader reader = sqlCommand.ExecuteReader();
while (reader.Read())
{
grid.Visibility = reader.GetString(1);
}
不幸的是,我遇到了一个错误:无法将类型“string”隐式转换为System.Windows.Visibility
是否有人有其他解决方案的想法,或者有可能将字符串转换为可见性
希望我能清楚地知道我想做什么,并提前感谢您提供的任何建议。System.Windows.Visibility是一个枚举,Enum有
Parse
方法从字符串中获取值。Parse返回对象
值,需要显式转换:
grid.Visibility = (System.Windows.Visibility)
Enum.Parse(typeof(System.Windows.Visibility), reader.GetString(1));
为什么不使用条件
if(reader.GetString(1).Equals("Visible")) {
grid.Visibility = Visibility.Visible;
} else {
grid.Visibility = Visibility.Collapsed;
}
最快的方法是
grid.Visibility=System.Windows.Visibility.Hidden
不存储字符串,只需存储布尔值,然后通过grid.Visibility=visible将其还原即可?可见性.可见:可见性.折叠代码>这看起来像我需要的,我要把代码放在一行吗?@MaChaToc,这取决于你:)如果我把答案放在一行,就会出现一个水平卷轴-我不喜欢h.scroll,因为它隐藏了部分代码-这是换行的唯一原因,我将尝试它并让您知道它是否有效:)注意,您还必须捕获当字符串不是某个枚举常量的有效名称时引发的ArgumentException。你真的不应该存储字符串。@MaChaToc,很好!Enum还有TryParse
方法,该方法带有out
参数,该参数返回true或false—解析成功。它对正确的字符串值也有同样的作用,但不会对不正确的字符串抛出异常(返回false)。你的方法更好是的,但是如果他想隐藏,它只是另一个else if,仍然有效