使用带有空 NavigateUri 的 HyperlinkButton 时崩溃
Crash when using HyperlinkButton with empty NavigateUri
我正在尝试在我的 uwp 应用程序中使用 HyperlinkButton。我将在控件生命周期的后期设置“NavigateUri”。以下代码片段中“ViewModel.SecondaryLink”的默认值为空。当它为空时,它正在崩溃。那么对于HyperlinkButton我们能不能不让NavigateUri的值为空呢?当我在控件的构造函数中初始化它时,它可以正常工作而不会崩溃,但是我是从互联网上获取这个值的,所以我需要稍后设置它。请帮忙。
<Grid
Grid.Column="1"
CornerRadius="3"
Margin="32,0,0,0">
<HyperlinkButton
Content="Learn more"
FontSize="14"
Margin="0,0,0,0"
Style="{StaticResource HyperlinkButtonStyle}"
NavigateUri="{x:Bind ViewModel.SecondaryLink, Mode=OneWay}" />
</Grid>
.cpp 文件
Windows::Foundation::Uri FamilyValuePropControlViewModel::SecondaryLink()
{
return Windows::Foundation::Uri(m_secondaryLink);
}
.h 文件
winrt::hstring m_secondaryLink{ L"" };
Crash when using HyperlinkButton with empty NavigateUri
如果用Uri类型代替string类型,应用null值时不会抛出异常
public Uri SecondaryLink { get; set; }
如果您确实要使用字符串类型,请在SecondaryLink 为空字符串时设置默认值。
public string SecondaryLink
{
get
{
if(_secondaryLink == null)
{
return "http://defaut";
}
else
{
return _secondaryLink;
}
}
set
{
_secondaryLink = value;
}
}
我正在尝试在我的 uwp 应用程序中使用 HyperlinkButton。我将在控件生命周期的后期设置“NavigateUri”。以下代码片段中“ViewModel.SecondaryLink”的默认值为空。当它为空时,它正在崩溃。那么对于HyperlinkButton我们能不能不让NavigateUri的值为空呢?当我在控件的构造函数中初始化它时,它可以正常工作而不会崩溃,但是我是从互联网上获取这个值的,所以我需要稍后设置它。请帮忙。
<Grid
Grid.Column="1"
CornerRadius="3"
Margin="32,0,0,0">
<HyperlinkButton
Content="Learn more"
FontSize="14"
Margin="0,0,0,0"
Style="{StaticResource HyperlinkButtonStyle}"
NavigateUri="{x:Bind ViewModel.SecondaryLink, Mode=OneWay}" />
</Grid>
.cpp 文件
Windows::Foundation::Uri FamilyValuePropControlViewModel::SecondaryLink()
{
return Windows::Foundation::Uri(m_secondaryLink);
}
.h 文件
winrt::hstring m_secondaryLink{ L"" };
Crash when using HyperlinkButton with empty NavigateUri
如果用Uri类型代替string类型,应用null值时不会抛出异常
public Uri SecondaryLink { get; set; }
如果您确实要使用字符串类型,请在SecondaryLink 为空字符串时设置默认值。
public string SecondaryLink
{
get
{
if(_secondaryLink == null)
{
return "http://defaut";
}
else
{
return _secondaryLink;
}
}
set
{
_secondaryLink = value;
}
}