想要实现一个像office中换字体的功能, 找了很多没找到, 而且又没有自带. 我便自己实现了一个 , 思路与大家共享. 为别的需要的人提供一个方法
结果图
其实不用类 但是我还是做了一个 如下
public class FontClass
{
private string _title;
public string Title
{
get { return _title; }
set { _title = value; }
}
private FontFamily _fontfamily;
public FontFamily FontF
{
get {
if (_fontfamily == null)
_fontfamily = new FontFamily(_title);
return _fontfamily; }
set { _fontfamily = value; }
}
public FontClass(String name)
{
_title = name;
}
}
在appbar中加入一个按钮, 添加 flyout 弹出窗口. 在这个弹窗里面添加了一个listview (... 好吧, 其实用别的控件也可以, 只不过我习惯了listview...). 添加了一个itemtemplate, 将它设置成需要的模样... 需要修改一些属性 比如单选什么的....
<Page.BottomAppBar>
<AppBar x:Name="bottomAppBar"
Opened="BottomAppBar_Opened" Closed="BottomAppBar_Closed" IsTapEnabled="False"
IsDoubleTapEnabled="False" IsHoldingEnabled="False"
IsRightTapEnabled="False" IsTabStop="False" IsSticky="False" BorderBrush="#00348DFD">
<AppBar.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Offset="0" Color="Transparent"/>
<GradientStop Color="#FF348DFD" Offset="1"/>
<GradientStop Color="#FF348DFD" Offset="0.068"/>
</LinearGradientBrush>
</AppBar.Background>
<Grid>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<Button HorizontalAlignment="Right" Name="fontbtn"
Style="{StaticResource FontAppBarButtonStyle}">
<Button.Flyout>
<Flyout>
<ListView x:Name="fontListView"
SelectionChanged="fontListView_SelectionChanged" RequestedTheme="Light">
<ListView.ItemTemplate>
<DataTemplate >
<Grid VerticalAlignment="Center" HorizontalAlignment="Center" >
<TextBlock Text="{Binding Title}" FontFamily="{Binding FontF}" FontSize="25"
VerticalAlignment="Center" HorizontalAlignment="Center"
Margin="3,3,13,3"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Flyout>
</Button.Flyout>
</Button>
</StackPanel>
</Grid>
</AppBar>
</Page.BottomAppBar>
在.cs文件中的LoadState函数中创建字体的资源, 并添加到listview里面
foreach (var it in listFontFamliy)
{
var item = new FontClass(it);
fontListView.Items.Add(item);
if (it == textblock.FontFamily.Source)
{
fontListView.SelectedItem = item;
}
}
修改listview的函数fontListView_SelectionChanged (刚刚在xaml里面添加的)
private void fontListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
textblock.FontFamily = ((FontClass)(((ListView)sender).SelectedItem)).FontF;
}
然后我们的textblock的文字就可以随着改变了