分享方式:


Power BI 視覺效果中的高對比模式支援

Windows [高對比] 設定會透過顯示更相異的色彩,讓您更容易看清楚文字與圖形。 此文章說明如何將高對比模式支援新增至 Power BI 視覺效果。 如需詳細資訊,請參閱 Power BI 中的高對比支援

若要檢視高對比支援的實作,請移至 PowerBI-visuals-sampleBarChart 視覺效果存放庫 \(英文\)。

若要以高對比模式顯示視覺效果,您必須:

  • 初始化時偵測高對比模式和色彩。
  • 實作時正確繪製視覺效果。

初始化

options.hostcolorPalette 成員有數個高對比模式的屬性。 使用這些屬性來判斷高對比模式是否為使用中,以及在使用中的情況下要使用哪些色彩。

  • 偵測到 Power BI 處於高對比模式

    如果 host.colorPalette.isHighContrasttrue,則高對比模式為使用中,且視覺效果應據此繪製本身。

  • 取得高對比色彩

    在高對比模式中顯示時,視覺效果應該將其本身限制為下列設定:

    • 前景色彩用來繪製任何線條、圖示、文字和框線,或填滿圖形。

    • 背景色彩用於背景,作為外框圖形的填滿色彩。

    • 前景選取色彩用來表示選取的或使用中的元素。

    • 超連結色彩僅用於超連結文字。

      注意

      如果需要次要色彩,可以將前景色彩與某些不透明度搭配使用 (Power BI 的原生視覺效果使用 40% 不透明度)。 請謹慎使用此功能,讓視覺效果詳細資料易於查看。

在初始化期間,您可以透過 constructor 方法儲存下列值:

private isHighContrast: boolean;

private foregroundColor: string;
private backgroundColor: string;
private foregroundSelectedColor: string;
private hyperlinkColor: string;
//...

constructor(options: VisualConstructorOptions) {
    this.host = options.host;
    let colorPalette: ISandboxExtendedColorPalette = host.colorPalette;
    //...
    this.isHighContrast = colorPalette.isHighContrast;
    if (this.isHighContrast) {
        this.foregroundColor = colorPalette.foreground.value;
        this.backgroundColor = colorPalette.background.value;
        this.foregroundSelectedColor = colorPalette.foregroundSelected.value;
        this.hyperlinkColor = colorPalette.hyperlink.value;
    }

或者,您可以在初始化期間儲存 host 物件,並在更新期間存取相關的 colorPalette 屬性。

實作

高對比支援的特定實作會因視覺效果而異,且取決於圖形設計的詳細資料。 為了在色彩有限的情況下讓重要詳細資料更容易區別,高對比模式通常會要求使用與預設模式稍有不同的設計。

Power BI 原生視覺效果會遵循這些指導方針:

  • 所有資料點都會使用相同的色彩 (前景)。
  • 所有文字、軸、箭號和線條都會使用前景色彩。
  • 粗圖形會繪製為外框,並使用粗筆觸 (至少兩個像素) 和背景色彩填滿。
  • 當資料點相關時,它們會以不同的標記圖形來區分,而資料線條則是以不同的虛線來區分。
  • 醒目提示資料元素時,所有其他元素都會將其不透明度變更為 40%。
  • 若為交叉分析篩選器和使用中篩選元素,請使用前景選取的色彩。

會以兩個像素的粗前景外框和背景填滿,來繪製下列範例橫條圖。 請比較其使用預設色彩與使用以下高對比主題的外觀:

範例

以下程式碼會顯示 visualTransform 函式中為了支援高對比而變更的一個地方。 它會作為更新期間轉譯的一部分進行呼叫。 如需此程式碼的完整實作,請參閱 PowerBI-visuals-sampleBarChart 視覺效果存放庫中的 barChart.ts 檔案。

for (let i = 0, len = Math.max(category.values.length, dataValue.values.length); i < len; i++) {
    let defaultColor: Fill = {
        solid: {
            color: colorPalette.getColor(category.values[i] + '').value
        }
    };

    barChartDataPoints.push({
        category: category.values[i] + '',
        value: dataValue.values[i],
        color: getCategoricalObjectValue<Fill>(category, i, 'colorSelector', 'fill', defaultColor).solid.color,
        selectionId: host.createSelectionIdBuilder()
            .withCategory(category, i)
            .createSelectionId()
    });
}

針對協助工具設計 Power BI 報表