这几天项目交付比较忙,今天简单把登录界面加到入主窗体,主窗体调整大小嵌入的登录页面自动居中功能,QQ:6726256
源码下载地址:https://download.csdn.net/download/liaohaiyin/20560584
接下来讲一下简单实现方法
页面显示到Frame容器中,功能类似浏览器页面一样。并且把CurrentPage绑定一个枚举值
<Border Background="{StaticResource WordBlueBrush}">
<Grid >
<Grid.Background>
<ImageBrush TileMode="Tile" ViewportUnits="Absolute" Viewport="0 0 500 500" ImageSource="Images/Backgrounds/emoji-background.png"/>
</Grid.Background>
<Frame x:Name="PageContainer" Content="{Binding CurrentPage, Converter={StaticResource ApplicationPageValueCv}}"/>
</Grid>
</Border>
protected ApplicationPage _currentPage = ApplicationPage.Login;
public ApplicationPage CurrentPage
{
get => _currentPage;
set
{
if (value != _currentPage)
_currentPage = value;
}
}
定义转换抽象类方便实现,实现接口IValueConverter, IMultiValueConverter,这里重点说一下MarkupExtension类,它的主要作用经常会遇到设计时属性值处于未知状态,而该属性值只有在应用运行时才能获取到,例如字符串转换没问题,但颜色类型是Brush转换时需要使用该类。
/// <summary>
/// 转换类型基类
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class BaseValueConverter<T> : MarkupExtension, IValueConverter, IMultiValueConverter
where T : class, new()
{
#region public Members Variable
/// <summary>
/// A static value member
/// </summary>
public static T mConverter = null;
#endregion public Members Variable
/// <summary>
/// Return Static Value
/// </summary>
/// <param name="serviceProvider"></param>
/// <returns></returns>
public override object ProvideValue(IServiceProvider serviceProvider)
{
return mConverter ?? (mConverter = new T());
}
#region public value methods
/// <summary>
/// 抽象转换方法
/// </summary>
/// <param name="value"></param>
/// <param name="targetType"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
public virtual object Convert(object value, Type targetType, object parameter, CultureInfo culture) => null;
/// <summary>
/// 返回转换值
/// </summary>
/// <param name="value"></param>
/// <param name="targetType"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => null;
/// <summary>
/// 多值抽象转换方法
/// </summary>
/// <param name="value"></param>
/// <param name="targetType"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
public virtual object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) => null;
/// <summary>
/// 返回转换值
/// </summary>
/// <param name="value"></param>
/// <param name="targetType"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
public virtual object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) => null;
#endregion public value methods
}
通过枚举转换判断加载指定页面到Frame容器Content属性。
public class ApplicationPageValueConverter : BaseValueConverter<ApplicationPageValueConverter>
{
public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var page = (ApplicationPage)value;
switch (page)
{
case ApplicationPage.Login:
return new LoginPage();
default:
return null;
}
}
public override object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
加载页面代码
最后登录页面,由于时间原因简单实现登录功能