Контрольный размер имеет последний размер элемента - PullRequest
0 голосов
/ 22 мая 2019

Элемент управления должен показывать дизайн с его названием и ценой в верхнем левом и нижнем правом углу. Я перекодирую программу из оконных форм и создал там собственный элемент управления. Я просто пытаюсь воспроизвести его в WPF и его шине борьбы элемент управления работает, но он не работает с первым изображением для определения размера или если изображение, которое я поднимаю, отличается от предыдущего изображения.

Проблема в том, что код не получает правильного размера до окончания события загрузки.

"поэтому я повторяю, основной вопрос - как получить размер, а затем вызвать второе событие, чтобы обновить наложение."

изображение контрольного результата:

! https://imgur.com/a/ubwjjbT

выпуск изображения второй коэффициент сжатия разной загрузки:

! https://imgur.com/wDukGSp

Второе загруженное изображение устраняет проблему с размером:

! https://imgur.com/JOUxv55

Кроме того, я читал о том, как пытаться превратить этот элемент управления в элемент управления многократного использования. Любые советы / предложения о том, с чего начать, следует понимать, что система в WPF будет принята с благодарностью.

следующий код - это то, что мне нужно, чтобы получить базовый макет, который я хочу. Мне все еще нужно, чтобы тема была лучше, но общий дизайн в основном правильный. Я попытался поиграть с холстом, но не смог получить правильный макет

для всех, кого я знаю, это может быть совершенно неправильно, поэтому, если они лучше, пожалуйста, укажите это. Я не хочу идти по неверному пути.

Xaml исправление было изменено событие размера изменено после загрузки источника.

 <Image x:Name="pbMainImage"  Source="{Binding Path=(local:SV.PbMainImage), Converter={StaticResource ImageConverter},
                        Mode=OneWay}" HorizontalAlignment="Center" VerticalAlignment="center" SizeChanged="name_price_sizingbclick"/>
<Button Name="pbbutton" Style="{StaticResource ImageButtonStyle}" Grid.ColumnSpan="6"  Click="pbmain_Click" SizeChanged="name_price_sizingbclick">

    <Border Name="Test" Grid.Row="0"   Margin="{Binding Path=(local:SV.pading)}" Background="#252525">

        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="{Binding Path=(local:SV.Imagespacing)}"/>
                <ColumnDefinition Width=".2*"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width=".2*"/>
                <ColumnDefinition Width="{Binding Path=(local:SV.Imagespacing)}"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height=".15*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height=".15*"/>
            </Grid.RowDefinitions>

            <local:ZoomBorder x:Name="border" Grid.ColumnSpan="5" Grid.RowSpan="3" ClipToBounds="True" >
                <Image x:Name="pbMainImage"  Source="{Binding Path=(local:SV.PbMainImage), Converter={StaticResource ImageConverter},
Mode=OneWay}" HorizontalAlignment="Center" VerticalAlignment="center"/>
            </local:ZoomBorder>

            <TextBlock Grid.Column="1" Background="Orange" Opacity=".8"  FontWeight="Bold" Padding="10 0 10 0" TextAlignment="Center" >
    <Viewbox>
        <TextBlock Text="{Binding Path=(local:SV.ActiveDesign)}" TextAlignment="Center"/>
    </Viewbox>
</TextBlock>

            <TextBlock Grid.Column="3"  Grid.Row="3" Background="GreenYellow" Opacity=".8" FontWeight="Bold" Padding="10 0 10 0" TextAlignment="Center"  >
    <Viewbox>
        <TextBlock  Text="{Binding Path=(local:SV.sprice),StringFormat=${0}}" TextAlignment="Center" />
    </Viewbox>
</TextBlock>

            <Grid Grid.Row="3" Grid.Column="1">
                <Grid.RowDefinitions>
                    <RowDefinition Height="*"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                <Button Panel.ZIndex="2" Grid.Row="1" Style="{StaticResource RoundCorner}" Content="4" Click="prevImg" Visibility="Hidden"/>
            </Grid>
            <Grid Grid.Row="3" Grid.Column="3">
                <Grid.RowDefinitions>
                    <RowDefinition Height="*"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                <Button Panel.ZIndex="2" Grid.Row="1" Style="{StaticResource RoundCorner}" Content="4" Click="nextvImg" Visibility="Hidden" />
            </Grid>

        </Grid>
    </Border>
</Button>

C #

//this is what moves the overlays around. on source change it runs when source is changed
public static void name_price_sizing(object sender, EventArgs e)
{
    MainWindow myWindow = Application.Current.MainWindow as MainWindow;
    Button p = myWindow.pbbutton;
    Image i = myWindow.pbMainImage;
    if (toggle == 0)
    {
        SV.Imagespacing = Math.Round(((p.ActualWidth - i.ActualWidth) / 2) / 2, MidpointRounding.AwayFromZero) * 2 - 14;
    }
    else { SV.Imagespacing = Math.Round(((p.ActualWidth - i.ActualWidth) / 2) / 2, MidpointRounding.AwayFromZero) * 2; }
    if (SV.Imagespacing < 0) { SV.Imagespacing = 0; }
}
//this is what moves the overlays around. on control click to resize for fullscreen
public void name_price_sizingbClick(object sender, EventArgs e)
{

    //  StaticVariables.Imagespacing = (pbbutton.ActualWidth - pbMainImage.ActualWidth) / 2;
    if (toggle == 0) { SV.Imagespacing = Math.Round(((pbbutton.ActualWidth - pbMainImage.ActualWidth) / 2) / 2, MidpointRounding.AwayFromZero) * 2 - 14; } else { SV.Imagespacing = Math.Round(((pbbutton.ActualWidth - pbMainImage.ActualWidth) / 2) / 2, MidpointRounding.AwayFromZero) * 2; }
    if (SV.Imagespacing < 0) { SV.Imagespacing = 0; }

}

1 Ответ

0 голосов
/ 22 мая 2019

Я решил свою проблему, не зная, как пометить это как решенную.Я добавил SizeChanged="name_price_sizingbclick" к управлению изображением, и это исправило проблему с размером.Я все еще хотел бы просмотреть код для подсказок и любой помощи о том, как превратить этот элемент управления в многократно используемый пользовательский элемент управления.

Исключить вопрос, поскольку операционная система ответила на него сам и не сделалнапишите это как ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...