[WPF] ScrollViewer HorizontalScrollBarVisibility Trigger

ScrollViewer 안에 Image와 Line을 넣고 사용중입니다.
HorizontalScrollBarVisibility를 Auto로 설정했습니다.
이 때 이미지가 ScrollViewer가 랜더링 된 크기보다 가로로 클 경우, 스크롤바가 생기고, 작은 경우는 사라지는데요.

혹시 이 스크롤바가 생기는 것을 Trigger로 잡아서 Line의 Style을 변경할 수 있을까요?

좋아요 1

닷넷채팅방 '밍’님의 제안으로 ScrollViewer의 Trigger를 이용하지 않고, Line 컨트롤에 직접 MultiValueConverter를 사용하여 해결했습니다.

좋아요 1

@Vincent 어떻게 처리하셨는지 소스코드가 궁금합니다!!

좋아요 1

지금 퇴근중이라 ㅠㅠ 내일 올리갰습니다!!

좋아요 1

별건 아닌데…까먹고 있었네요…ㅎㅎ

                            <Line Stroke="{Binding LineColor}"
                                  StrokeThickness="1"
                                  X1="0"
                                  Y1="{Binding LineY, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                  Y2="{Binding LineY, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
                                <Line.Style>
                                    <Style TargetType="Line">
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding EnableGuideLine}"
                                                         Value="False">
                                                <Setter Property="Visibility" 
                                                        Value="Hidden"/>
                                            </DataTrigger>
                                            <DataTrigger Binding="{Binding SelectedImageInfo}"
                                                         Value="{x:Null}">
                                                <Setter Property="Visibility"
                                                        Value="Hidden"/>
                                            </DataTrigger>
                                            <DataTrigger Binding="{Binding IsControlPush}"
                                                         Value="True">
                                                <Setter Property="Visibility" 
                                                        Value="Hidden"/>
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </Line.Style>
                                <Line.X2>
                                    <MultiBinding Converter="{StaticResource LineWidthConverter}">
                                        <Binding ElementName="ImgDisplay"
                                                 Path="ActualWidth"/>
                                        <Binding ElementName="ScImage"
                                                 Path="ActualWidth"/>
                                    </MultiBinding>
                                </Line.X2>
                            </Line>

이런식으로 X2 요소에 대해서 확장문법으로 MultiBinding 처리했습니다.

    public class LineWidthConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            double imageWidth = System.Convert.ToDouble(values[0]);
            double scrollViewerActualWidth = System.Convert.ToDouble(values[1]);

            if (imageWidth <= scrollViewerActualWidth)
            {
                return scrollViewerActualWidth;
            }
            else
            {
                return imageWidth;
            }
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

컨버터 소스코드입니다.

좋아요 1