我正在使用InkCanvas
和InkToolbar
控件,並且每次更新畫布的當前墨跡屬性時都會遇到小的UI故障。InkToolbar UI在更新InkDrawingAttributes時與目標InkCanvas不同步
比方說,我有這兩個控件在一個頁面:
<InkToolbar TargetInkCanvas="{x:Bind DrawingCanvas}"/>
<InkCanvas x:Name="DrawingCanvas"/>
然後在頁面Loaded
事件處理程序我有這樣的事情來設置初始墨屬性:
// Update the attributes
InkDrawingAttributes attributes = new InkDrawingAttributes
{
PenTip = PenTipShape.Circle,
Color = Colors.Red,
// And so on...
};
DrawingCanvas.InkPresenter.UpdateDefaultDrawingAttributes(attributes);
正在使用的工具已正確更改,因此例如,如果我將屬性設置爲使用黃色熒光筆,則當我開始繪畫時,實際上正在按照預期使用熒光筆。
但,問題是,InkToolbar控制的用戶界面沒有更新,它仍然顯示了默認的工具爲一個使用(使用的顏色熒光筆沒有更新要麼,所以如果我用橙色熒光筆初始化屬性,工具欄仍將顯示默認的黃色)。
這是設計還是控制中的錯誤?我沒有看到在工具欄中明確設置InkDrawingAttributes
的方法,因爲該屬性是隻讀的(並且手動設置其嵌套屬性似乎不會影響工具欄UI)。
編輯:因爲InkToolbar
不更新當目標InkCanvas
控制改變的屬性,我想出了這個代碼嘗試解決這一問題的UI:
// Assume I already have the "attributes" variable with my desired settings
InkToolbarTool tool;
if (attributes.DrawAsHighlighter) tool = InkToolbarTool.Highlighter;
else tool = attributes.Kind == InkDrawingAttributesKind.Default ? InkToolbarTool.BallpointPen : InkToolbarTool.Pencil;
InkToolbarToolButton button = Toolbar.GetToolButton(tool);
Toolbar.ActiveTool = button;
現在,右鍵可以正確選擇,但我仍然無法設置特定的筆大小/顏色。 我只會使用原始調色板中實際存在的顏色,這就是爲什麼我不擔心如果我嘗試設置在InkToolbar
控件中未預定義的顏色會發生什麼情況。
最後,我只想保存/恢復不同會話之間的用戶墨跡繪圖設置,並且我希望InkToolbar
的用戶界面也可以遵循這一點。有沒有辦法做到這一點,還是我必須解決只是選擇正確的工具按鈕(顏色/大小不同步)?
感謝您的幫助!
有一個在您編輯的代碼中的問題,'DrawingCanvas.InkPresenter.UpdateDefaultDrawingAttributes(attributes); '應該被稱爲_after_'Toolbar.ActiveTool = button;',以便繪圖屬性不會再被覆蓋。 – kennyzx
@kennyzx是的我知道,我的問題中的兩個代碼片段不會被視爲有序,我在發佈最初的問題後添加了第二個代碼片段。我正在使用第二個片段來至少在「InkToolbar」中設置正確的按鈕,然後在第一個片段中的代碼加載我想要使用的右側「InkDrawingAttributes」。 – Sergio0694