[WPF] Отключить custom стиль для конкретного контрола
От: Аноним  
Дата: 16.11.10 02:57
Оценка:
Доброе время суток. Пишу приложение с использованием wpf, использую стиль Expression Dark из пакета wpf themes. Написана своя панель, по сути wrap panel с измененным способом расположения элементов(наследуется от Panel). При использовании системного стиля все хорошо, располагается так как нужно. Однако, в боевом приложении элементы располагаются как в обычном StackPanel друг под другом. Элемент используется как ItemsPanel для ListBox. Вопрос: Как включить системный стиль для конкретного ItemsPanel конкретного ListBox в приложении.
wpf panel listbox
Re: [WPF] Отключить custom стиль для конкретного контрола
От: Sinix  
Дата: 16.11.10 03:23
Оценка:
Здравствуйте, Аноним, Вы писали:

А>использую стиль Expression Dark из пакета wpf themes. Написана своя панель, по сути wrap panel с измененным способом расположения элементов(наследуется от Panel). При использовании системного стиля все хорошо, располагается так как нужно. Однако, в боевом приложении элементы располагаются как в обычном StackPanel друг под другом. Элемент используется как ItemsPanel для ListBox.


А>Вопрос: Как включить системный стиль для конкретного ItemsPanel конкретного ListBox в приложении.


Таак... я правильно понимаю, что вы хотите заменить ItemsPanel у ListBox'а с VirtualizingStackPanel(по умолчанию — она) — на свою панель? Зачем вам тогда системный стиль? Просто укажите нужный ItemsPanelTemplate и всё
Re[2]: [WPF] Отключить custom стиль для конкретного контрола
От: Аноним  
Дата: 16.11.10 03:30
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Таак... я правильно понимаю, что вы хотите заменить ItemsPanel у ListBox'а с VirtualizingStackPanel(по умолчанию — она) — на свою панель? Зачем вам тогда системный стиль? Просто укажите нужный ItemsPanelTemplate и всё



            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <custom:AnimatedWrapPanel IsItemsHost="True" AverageHeight="200" MagnifiedHeight="400" OverridesDefaultStyle="True"/>                    
                </ItemsPanelTemplate>                
            </ListBox.ItemsPanel>



Было так, не работает.
Re[3]: [WPF] Отключить custom стиль для конкретного контрола
От: Sinix  
Дата: 16.11.10 03:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Было так, не работает.

А должно Может, вы где-то переопределяете ItemsPanel?

Самплы:
http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemspanel(VS.95).aspx
http://stackoverflow.com/questions/908089/using-wrappanel-and-scrollviewer-to-give-a-multi-column-listbox-in-wpf

Скорее всего панель заменилась (поставьте в AnimatedWrapPanel брякпойнт на ArrangeOverride), но работает неверно.
Re[4]: [WPF] Отключить custom стиль для конкретного контрола
От: Аноним  
Дата: 16.11.10 04:11
Оценка:
Здравствуйте, Sinix, Вы писали:


S>Скорее всего панель заменилась (поставьте в AnimatedWrapPanel брякпойнт на ArrangeOverride), но работает неверно.


Да, вы правы, так и есть, заменилась. Тогда появляется новый вопрос: А как вставить мою панель так, чтобы она заменила стандартную, не переопределяя при этом стили приложения?
Или хотя-бы переписать их так, чтобы по умолчанию была VirtualizingStackPanel но, чтобы ее легко можно было заменить на любую другую панель?

Часть кода стиля

    <Style TargetType="{x:Type ListBox}">
        <Setter Property="SnapsToDevicePixels" Value="true" />
        <Setter Property="Background" Value="{StaticResource ControlBackgroundBrush}" />
        <Setter Property="BorderBrush">
            <Setter.Value>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                    <GradientStop Color="#FFA3AEB9" Offset="0" />
                    <GradientStop Color="#FF8399A9" Offset="0.375" />
                    <GradientStop Color="#FF718597" Offset="0.375" />
                    <GradientStop Color="#FF617584" Offset="1" />
                </LinearGradientBrush>
            </Setter.Value>
        </Setter>
        <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
        <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
        <Setter Property="ScrollViewer.CanContentScroll" Value="True" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListBox}">
                    <Grid>
                        <Border x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2" Background="{DynamicResource ControlBackgroundBrush}" />
                        <ScrollViewer Margin="1" Style="{DynamicResource NuclearScrollViewer}" Focusable="false" Background="{x:Null}">
                            <StackPanel Margin="1,1,1,1" IsItemsHost="true" />
                        </ScrollViewer>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter Property="Background" Value="{DynamicResource DisabledBackgroundBrush}" TargetName="Border" />
                            <Setter Property="BorderBrush" Value="{DynamicResource DisabledBorderBrush}" TargetName="Border" />
                        </Trigger>
                        <Trigger Property="IsGrouping" Value="true">
                            <Setter Property="ScrollViewer.CanContentScroll" Value="false" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
Re[5]: [WPF] Отключить custom стиль для конкретного контрола
От: Аноним  
Дата: 16.11.10 04:17
Оценка:
Я так понял, что нужно менять конкретно это:

<ScrollViewer Margin="1" Style="{DynamicResource NuclearScrollViewer}" Focusable="false" Background="{x:Null}">
    <StackPanel Margin="1,1,1,1" IsItemsHost="true" />
</ScrollViewer>

binding какой втиснуть?
Re[5]: [WPF] Отключить custom стиль для конкретного контрола
От: Sinix  
Дата: 16.11.10 05:40
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Часть кода стиля

А, ну всё как всегда, аффтору темы expression dark руки оторвать от задницы и никуда не пришивать. Хотя он и так безрукий

<ScrollViewer Margin="1" Style="{DynamicResource NuclearScrollViewer}" Focusable="false" Background="{x:Null}">
    <StackPanel Margin="1,1,1,1" IsItemsHost="true" />
</ScrollViewer>


заменить на

<ScrollViewer Margin="1" Style="{DynamicResource NuclearScrollViewer}" Focusable="false" Background="{x:Null}">
    <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</ScrollViewer>


Увы, качество всех нестандартных тем, даже платных, ничего кроме "хуже, чем УГ" не заслуживает.
Re[6]: [WPF] Отключить custom стиль для конкретного контрола
От: Аноним  
Дата: 16.11.10 06:28
Оценка:
Здравствуйте, Sinix, Вы писали:



S>Увы, качество всех нестандартных тем, даже платных, ничего кроме "хуже, чем УГ" не заслуживает.


Спасибо вам большое за помощь
Просто это моя первая серьезная программа, где в качестве gui engine используется wpf, многое еще не ясно
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.