ScrollViewer 안에 Image와 Line을 넣고 사용중입니다.
HorizontalScrollBarVisibility를 Auto로 설정했습니다.
이 때 이미지가 ScrollViewer가 랜더링 된 크기보다 가로로 클 경우, 스크롤바가 생기고, 작은 경우는 사라지는데요.
혹시 이 스크롤바가 생기는 것을 Trigger로 잡아서 Line의 Style을 변경할 수 있을까요?
ScrollViewer 안에 Image와 Line을 넣고 사용중입니다.
HorizontalScrollBarVisibility를 Auto로 설정했습니다.
이 때 이미지가 ScrollViewer가 랜더링 된 크기보다 가로로 클 경우, 스크롤바가 생기고, 작은 경우는 사라지는데요.
혹시 이 스크롤바가 생기는 것을 Trigger로 잡아서 Line의 Style을 변경할 수 있을까요?
닷넷채팅방 '밍’님의 제안으로 ScrollViewer의 Trigger를 이용하지 않고, Line 컨트롤에 직접 MultiValueConverter를 사용하여 해결했습니다.
지금 퇴근중이라 ㅠㅠ 내일 올리갰습니다!!
별건 아닌데…까먹고 있었네요…ㅎㅎ
<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();
}
}
컨버터 소스코드입니다.