簡體   English   中英

如果使用綁定/轉換器,則ComputedVerticalScrollBarVisibility觸發器不起作用

[英]ComputedVerticalScrollBarVisibility Trigger does not work if using binding/converter

這個問題與我的另一個SO問題非常相關,但是這個問題更加具體。 隨時詢問其他問題以獲取更多詳細信息,但是我應該在此處提供您所需的一切。

我已經為列表視圖實現了自定義樣式,以便可以使用以下內容訪問滾動條屬性(我刪除了一些不相關的雜項)

<Style x:Key="{x:Static GridView.GridViewScrollViewerStyleKey}" TargetType="ScrollViewer">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ScrollViewer">
                <Grid Background="{TemplateBinding Background}">
                    <DockPanel Margin="{TemplateBinding Padding}">
                        <ScrollViewer DockPanel.Dock="Top" Focusable="false">   
                    </DockPanel>
                    <ScrollBar Name="PART_HorizontalScrollBar" Orientation="Horizontal"  Grid.Row="1" Maximum="{TemplateBinding ScrollableWidth}" ViewportSize="{TemplateBinding ViewportWidth}" Value="{TemplateBinding HorizontalOffset}" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/>
                    <ScrollBar Name="PART_VerticalScrollBar" Grid.Column="1" Margin="20,0" Maximum="{TemplateBinding ScrollableHeight}" ViewportSize="{TemplateBinding ViewportHeight}" Value="{TemplateBinding VerticalOffset}" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="ComputedVerticalScrollBarVisibility" Value="Collapsed">
                        <Setter Property="Width">
                            <Setter.Value>
                                <Binding  
                                    ConverterParameter="400" 
                                    RelativeSource="{RelativeSource FindAncestor,AncestorType={x:Type ListView}}"
                             >
                                    <Binding.Converter>
                                        <Converters:ListViewColumnResizeConverter/>
                                    </Binding.Converter>
                                </Binding>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                    <Trigger Property="ComputedVerticalScrollBarVisibility" Value="Visible">
                        <Setter Property="Width">
                            <Setter.Value>
                                <Binding  
                                    ConverterParameter="500" 
                                    RelativeSource="{RelativeSource FindAncestor,AncestorType={x:Type ListView}}"
                             >
                                    <Binding.Converter>
                                        <Converters:ListViewColumnResizeConverter/>
                                    </Binding.Converter>
                                </Binding>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

請注意,我有兩個觸發器,一個是Visible ,另一個是Collapsed 當我運行我的應用程序時,無論如何,我都會Visible和“ Collapsed 我什至延遲了使用計時器加載數據的時間,並且未觸發任何Visible 是否有我缺少的東西,或者這是Dependency Property未正確觸發的錯誤?

UPDATE

因此,我注意到該系統的准系統正在運行(不使用綁定和轉換器),因此我從代碼中刪除了該系統,並使觸發器簡單地更新了背景色。 而且,它起作用了,那么為什么添加綁定/轉換器會使觸發器混亂呢?

好吧,答案肯定對我沒有幫助,但是似乎綁定中的值已被緩存。 由於我的代碼隱藏轉換器更像是一種獲取對Computed觸發器的代碼訪問權限的工具,所以我什至沒有使用返回值。 但是,我繼續將唯一的顏色值綁定到每個觸發器,並且一旦滾動條變得可見,我的代碼就不再被擊中,而是使用了初始調用的返回值。 我必須承認,這在MS團隊中相當聰明,但對我來說卻是一個絆腳石。 如果用戶具有將用於每個觸發器的時間相關值怎么辦?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM