linebreak_WPF:LineBreak动态启用/禁用
我不相信FlowDocument中有任何方法可以使LineBreak不會真正中斷,除非將其取出。您可以選擇切換到使用WPF布局或使用附加屬性在LineBreak和空Run之間切換。
使用WPF布局
您可以考慮使用WPF布局。像這樣的東西:
現在,您只需切換DataTemplates即可輕松切換布局。
使用綁定自動刪除LineBreaks
如果你想通過綁定“隱藏”LineBreak,你可以使用附加的“BecomeLineBreak”屬性來執行它,當應用于空的Run并設置為true時,將其刪除并用LineBreak替換它。
像魔術一樣你現在有能力寫:
當SomeCondition屬性為true時,您的Run將變為LineBreak。
這是代碼:
public class LineBreakSwitcher : DependencyObject
{
public static bool GetBecomeLineBreak(DependencyObject obj) { return (bool)obj.GetValue(BecomeLineBreakProperty); }
public static void SetBecomeLineBreak(DependencyObject obj, bool value) { obj.SetValue(BecomeLineBreakProperty, value); }
public static readonly DependencyProperty BecomeLineBreakProperty = DependencyProperty.RegisterAttached("BecomeLineBreak", typeof(bool), typeof(LineBreakSwitcher), new PropertyMetadata
{
PropertyChangedCallback = (obj, e) =>
{
var oldElement = (Inline)obj;
var newElement = (bool)e.NewValue ? (Inline)new LineBreak() : new Run();
newElement.SetBinding(BecomeLineBreakProperty, oldElement.GetBindingExpression(BecomeLineBreakProperty).ParentBindingBase);
var parent = (Paragraph)oldElement.Parent;
parent.Inlines.InsertBefore(oldElement, newElement);
parent.Inlines.Remove(oldElement);
}
});
工作原理:當一個Run上的BecomeLineBreak變為true時,會創建一個新的LineBreak,復制BecomeLineBreak綁定,在Run之前插入LineBreak,然后刪除Run。當BecomeLineBreak變為false時,將創建一個新的Run并且整個過程以相反的方式發生。
總結
以上是生活随笔為你收集整理的linebreak_WPF:LineBreak动态启用/禁用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【量化交易笔记】1.数据来源
- 下一篇: 漫游者w800bt 电脑不播放一分钟就断